package com.qiaoba.module.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qiaoba.api.system.entity.SysUser;
import com.qiaoba.api.system.entity.param.SysUserParam;
import com.qiaoba.api.system.entity.vo.SysUserVo;
import com.qiaoba.common.database.annotation.SelectOneRow;
import com.qiaoba.module.system.templates.SysUserExport;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户管理 数据层
 *
 * @author ailanyin
 * @version 1.0
 * @since 2023-04-23 20:38:55
 */
public interface SysUserMapper extends BaseMapper<SysUser> {

    /**
     * 校验用户名是否唯一
     *
     * @param sysUser sysUser
     * @return count
     */
    @SelectOneRow
    String checkUsernameUnique(SysUser sysUser);

    /**
     * 校验手机号码是否唯一
     *
     * @param sysUser sysUser
     * @return count
     */
    @SelectOneRow
    String checkPhoneUnique(SysUser sysUser);

    /**
     * 校验email是否唯一
     *
     * @param sysUser sysUser
     * @return count
     */
    @SelectOneRow
    String checkEmailUnique(SysUser sysUser);

    /**
     * 分页查询用户列表
     *
     * @param page  分页信息
     * @param param 查询条件
     * @return list
     */
    Page<SysUserVo> selectVoPageList(Page page, @Param("param") SysUserParam param);

    /**
     * 查询用户列表
     *
     * @param param 查询条件
     * @return list
     */
    List<SysUserVo> selectVoList(@Param("param") SysUserParam param);

    /**
     * 查询导出数据
     *
     * @param param 查询条件
     * @return list
     */
    List<SysUserExport> selectExportData(@Param("param") SysUserParam param);

    /**
     * 分页查询角色已绑定的用户列表
     *
     * @param page  分页信息
     * @param param 查询条件
     * @return list
     */
    Page<SysUserVo> selectAllocatedList(Page page, @Param("param") SysUserParam param);

    /**
     * 分页查询角色未绑定的用户列表
     *
     * @param page  分页信息
     * @param param 查询条件
     * @return list
     */
    Page<SysUserVo> selectUnAllocatedList(Page page, @Param("param") SysUserParam param);
}
