package org.xyzh.system.mapper.role;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.xyzh.api.system.vo.PermissionVO;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.sys.TbSysRolePermissionDTO;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * @description    系统角色权限关系Mapper接口
 * @filename    TbSysRolePermissionMapper.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-11-07
 */
@Mapper
public interface TbSysRolePermissionMapper extends BaseMapper<TbSysRolePermissionDTO> {

    /**
     * @description    插入系统角色权限关系
     * @param    rolePermissionDTO    系统角色权限关系DTO
     * @return    int    插入结果
     * @author    yslg
     * @since 2025-11-07
     */
    int insertRolePermission(TbSysRolePermissionDTO rolePermissionDTO);

    /**
     * @description    更新系统角色权限关系
     * @param    rolePermissionDTO    系统角色权限关系DTO
     * @return    int    更新结果
     * @author    yslg
     * @since 2025-11-07
     */
    int updateRolePermission(TbSysRolePermissionDTO rolePermissionDTO);

    /**
     * @description    删除系统角色权限关系
     * @param    rolePermissionDTO    系统角色权限关系DTO
     * @return    int    删除结果
     * @author    yslg
     * @since 2025-11-07
     */
    int deleteRolePermission(TbSysRolePermissionDTO rolePermissionDTO);

    /**
     * @description    根据角色ID查询系统角色权限关系
     * @param    roleId    角色ID
     * @return    List<PermissionVO>    权限VO列表
     * @author    yslg
     * @since 2025-11-07
     */
    List<PermissionVO> getRolePermissionByRoleId(String roleId);

    /**
     * @description    根据条件查询系统角色权限关系列表
     * @param    filter    系统角色权限关系DTO
     * @return    List<PermissionVO>    权限VO列表
     * @author    yslg
     * @since 2025-11-07
     */
    List<PermissionVO> getRolePermissionByFilter(@Param("filter") TbSysRolePermissionDTO filter);

    /**
     * @description    根据条件查询系统角色权限关系分页列表
     * @param    filter    系统角色权限关系DTO
     * @param    pageParam    分页参数
     * @return    List<PermissionVO>    权限VO列表
     * @author    yslg
     * @since 2025-11-07
     */
    List<PermissionVO> getRolePermissionPageByFilter(@Param("filter") TbSysRolePermissionDTO filter, @Param("pageParam") PageParam pageParam);
    
    /**
     * @description    根据条件查询系统角色权限关系数量
     * @param    filter    系统角色权限关系DTO
     * @return    int    系统角色权限关系数量
     * @author    yslg
     * @since 2025-11-07
     */
    int getRolePermissionCount(TbSysRolePermissionDTO filter);

    /**
     * @description    根据用户ID一次性查询该用户所有权限（连表 user_role -> role_permission -> permission-> view_permission）
     * @param    userId    用户ID
     * @return    List<PermissionVO> 权限VO列表
     */
    List<PermissionVO> getPermissionsByUserId(@Param("userId") String userId);
}

