package com.simuwang.base.mapper.system;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.simuwang.base.common.support.dos.OnlyIdNameDO;
import com.simuwang.base.pojo.dos.sys.SysMenuDO;
import com.simuwang.base.pojo.dos.sys.SysRoleDO;
import com.simuwang.base.pojo.dos.sys.SysRoleUserDO;
import com.simuwang.base.pojo.dos.sys.SysUserDO;
import com.simuwang.base.pojo.dto.sys.RoleUserQuery;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface SysUserMapper extends BaseMapper<SysUserDO> {
    /**
     * 根据用户id从用户角色关系表查询该用户的所有角色信息
     *
     * @param userId 用户id
     * @return /
     */
    List<OnlyIdNameDO> listBindRoles(Integer userId);

    /**
     * 根据用户id从用户角色关系表查询该用户的所有角色信息
     *
     * @param userId 用户id
     * @return /
     */
    List<SysRoleDO> selectRoleByUserId(Integer userId);

    /**
     * 获取所有角色信息
     *
     * @return /
     */
    List<SysRoleDO> selectAllRole();

    /**
     * 根据用户id从用户角色关系表和角色权限关系表查询该用户的所有权限信息
     *
     * @param userId 用户id
     * @return /
     */
    List<SysMenuDO> selectMenuByUserId(Integer userId);

    /**
     * 获取全部权限信息
     *
     * @return /
     */
    List<SysMenuDO> selectAllMenu();

    /**
     * 角色用户关联的分页
     *
     * @param query 分页参数
     * @return /
     */
    List<SysRoleUserDO> roleUserPage(RoleUserQuery query);

    /**
     * 角色用户关联的总数
     *
     * @param query 查询参数
     * @return /
     */
    long countRoleUser(RoleUserQuery query);

    /**
     * 删除某个用户的所有角色关系（用物理删）
     *
     * @param userId 用户id
     * @return /
     */
    int delUserRoleByUserId(Integer userId);

    /**
     * 批量新增用户与角色的关系
     *
     * @param userId  用户id
     * @param roleIds 角色id
     * @return /
     */
    int batchUserRoles(Integer userId, List<Integer> roleIds);
}
