package com.zhiqiyun.open.mapper;

import com.zhiqiyun.open.models.RoleInfo;
import com.zhiqiyun.open.models.UserBaseInfo;
import com.zhiqiyun.open.models.UserLoginLog;
import com.zhiqiyun.open.models.UserOperateLog;
import com.zhiqiyun.open.mybatis.paginator.domain.PageBounds;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author Administrator
 * @date 2017-6-7
 */
@Mapper
public interface UserBaseInfoMapper {
    /**
     * 分页查询用户基本信息
     *
     * @param bounds
     * @param queryWrapper
     * @return
     */
    List<UserBaseInfo> findPage(PageBounds bounds, Map<String, Object> queryWrapper);

    /**
     * 插入用户基本信息
     *
     * @param userInfo
     */
    void insert(UserBaseInfo userInfo);

    /**
     * 更新用户基本信息
     *
     * @param userInfo
     */
    void updateById(UserBaseInfo userInfo);

    /**
     * 查询用户基本信息
     *
     * @param id
     * @return
     */
    UserBaseInfo findById(@Param("id") Long id);

    /**
     * 查询用户所拥有的权限
     *
     * @param uid
     * @return
     */
    List<String> findUserAuthorities(@Param("uid") Long uid);

    /**
     * 删除用户所有角色
     *
     * @param uid
     */
    void deleteRoles(@Param("uid") Long uid);

    /**
     * 插入用户角色
     *
     * @param uid
     * @param roles
     */
    void insertRoles(@Param("uid") Long uid, @Param("roles") Long[] roles);

    /**
     * 查询用户角色
     *
     * @param uid
     * @return
     */
    List<RoleInfo> findRoles(@Param("uid") Long uid);

    /**
     * 插入日志信息
     *
     * @param userOperateLog
     */
    void insertOperateLog(UserOperateLog userOperateLog);

    /**
     * 更新日志信息
     *
     * @param userOperateLog
     */
    void updateOperateLogById(UserOperateLog userOperateLog);

    /**
     * 插入登录日志
     *
     * @param userLoginLog
     */
    void insertLoginLog(UserLoginLog userLoginLog);

    /**
     * 分页查询登录日志
     *
     * @param bounds
     * @param uid
     * @return
     */
    List<UserLoginLog> findLoginLogPage(PageBounds bounds, @Param("uid") Long uid);

    /**
     * 查询搜索账号
     *
     * @param searchKey
     * @return
     */
    List<Map<String, Object>> findSelectAccounts(@Param("searchKey") String searchKey);
}
