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.menu.TbSysMenuPermission;

import java.util.List;

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

    /**
     * @description 批量绑定菜单权限
     * @param menuPermissions 菜单权限列表
     * @param creator 创建人
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-07
     */
    int batchBindMenuPermission(@Param("menuPermissions") List<TbSysMenuPermission> menuPermissions);

    /**
     * @description 批量解绑菜单权限
     * @param menuPermissions 菜单权限列表
     * @param updater 更新人
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-07
     */
    int batchUnbindMenuPermission(@Param("menuPermissions") List<TbSysMenuPermission> menuPermissions);

    /**
     * @description 根据菜单ID和权限ID查询关联关系
     * @param menuId 菜单ID
     * @param permissionId 权限ID
     * @return TbSysMenuPermission 菜单权限关联信息
     * @author yslg
     * @since 2025-10-07
     */
    TbSysMenuPermission selectByMenuIdAndPermissionId(@Param("menuId") String menuId, 
                                                     @Param("permissionId") String permissionId);

    /**
     * @description 根据菜单ID查询权限关联列表
     * @param menuId 菜单ID
     * @return List<TbSysMenuPermission> 菜单权限关联列表
     * @author yslg
     * @since 2025-10-07
     */
    List<TbSysMenuPermission> selectByMenuId(@Param("menuId") String menuId);

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

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