package ink.wgink.service.role.service;

import ink.wgink.interfaces.role.IRoleUserBaseService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.service.user.pojo.pos.UserPO;

import java.util.List;
import java.util.Map;

/**
 * When you feel like quitting. Think about why you started
 * 当你想要放弃的时候，想想当初你为何开始
 *
 * @ClassName: IRoleUserService
 * @Description: 角色用户
 * @Author: WangGeng
 * @Date: 2021/2/18 11:24
 * @Version: 1.0
 **/
public interface IRoleUserService extends IRoleUserBaseService {

    /**
     * 保存角色与用户
     *
     * @param roleId      角色ID
     * @param saveUserIds 用户ID列表
     */
    void save(String roleId, List<String> saveUserIds);

    /**
     * 保存角色和用户
     *
     * @param roleId     角色ID
     * @param saveUserId 用户ID
     */
    void save(String roleId, String saveUserId);

    /**
     * 更新用户组人员列表
     *
     * @param roleId    角色ID
     * @param saveUserIds   新增ID列表
     * @param deleteIds 删除ID列表
     */
    void update(String roleId, List<String> saveUserIds, List<String> deleteIds);

    /**
     * 删除角色用户
     * @param roleId
     */
    void delete(String roleId);

    /**
     * 删除角色用户
     * @param roleIds
     */
    void delete(List<String> roleIds);

    /**
     * 用户组人员删除
     *
     * @param roleId  用户组ID
     * @param userIds 用户ID列表
     */
    void delete(String roleId, List<String> userIds);

    /**
     * 部门用户列表
     *
     * @param params
     * @return
     */
    List<DepartmentUserDTO> listDepartmentUser(Map<String, Object> params);

    /**
     * 用户列表
     *
     * @param requestParams
     * @return
     */
    List<UserDTO> listUser(Map<String, Object> requestParams);

    /**
     * 用户分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<UserDTO>> listPageUser(ListPage page);

    /**
     * 用户列表
     *
     * @param params
     * @return
     */
    List<UserPO> listUserPO(Map<String, Object> params);

    /**
     * 用户列表
     *
     * @param roleId
     * @return
     */
    List<UserPO> listUserPOByRoleId(String roleId);

    /**
     * 用户列表
     *
     * @param roleIds
     * @return
     */
    List<UserPO> listUserPOByRoleIds(List<String> roleIds);
}
