package org.xyzh.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.permission.TbSysPermission;
import org.xyzh.common.dto.role.TbSysRolePermission;

import java.util.List;

/**
 * @description RolePermissionMapper.java文件描述 角色权限关联数据访问层
 * @filename RolePermissionMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-07
 */
@Mapper
public interface RolePermissionMapper extends BaseMapper<TbSysRolePermission> {

    /**
     * @description 批量绑定角色权限
     * @param rolePermissions 角色权限列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-07
     */
    int batchBindRolePermission(@Param("rolePermissions") List<TbSysRolePermission> rolePermissions);

    /**
     * @description 批量解绑角色权限
     * @param rolePermissions 角色权限列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-07
     */
    int batchUnbindRolePermission(@Param("rolePermissions") List<TbSysRolePermission> rolePermissions);

    /**
     * @description 根据角色ID和权限ID查询关联关系
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return TbSysRolePermission 角色权限关联信息
     * @author yslg
     * @since 2025-10-07
     */
    TbSysRolePermission selectByRoleIdAndPermissionId(@Param("roleId") String roleId, 
                                                     @Param("permissionId") String permissionId);

    /**
     * @description 根据角色ID查询权限关联列表
     * @param roleId 角色ID
     * @return List<TbSysRolePermission> 角色权限关联列表
     * @author yslg
     * @since 2025-10-07
     */
    List<TbSysPermission> selectByRoleId(@Param("roleId") String roleId);

    /**
     * @description 根据权限ID查询角色关联列表
     * @param permissionId 权限ID
     * @return List<TbSysRolePermission> 角色权限关联列表
     * @author yslg
     * @since 2025-10-07
     */
    List<TbSysRolePermission> selectByPermissionId(@Param("permissionId") String permissionId);

    /**
     * @description 删除角色权限关联（逻辑删除）
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @param updater 更新人
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-07
     */
    int deleteByRoleIdAndPermissionId(@Param("roleId") String roleId, 
                                     @Param("permissionId") String permissionId, 
                                     @Param("updater") String updater);
}
