package cn.nianxx.thhotel.platform.access.repository;

import cn.nianxx.thhotel.platform.access.domain.PlatformPermissionEntity;
import cn.nianxx.thhotel.platform.access.domain.PlatformRoleEntity;
import java.util.List;
import java.util.Optional;

/**
 * 平台角色权限仓储。负责内置权限、角色和用户授权关系的持久化。
 */
public interface PlatformAccessRepository {

    /**
     * 按角色代码查询角色。
     */
    Optional<PlatformRoleEntity> findRoleByCode(String roleCode);

    /**
     * 按权限代码查询权限。
     */
    Optional<PlatformPermissionEntity> findPermissionByCode(String permissionCode);

    /**
     * 新增角色。
     */
    void insertRole(PlatformRoleEntity role);

    /**
     * 更新角色。
     */
    void updateRole(PlatformRoleEntity role);

    /**
     * 新增权限。
     */
    void insertPermission(PlatformPermissionEntity permission);

    /**
     * 更新权限。
     */
    void updatePermission(PlatformPermissionEntity permission);

    /**
     * 确保角色权限关系存在。
     */
    void ensureRolePermission(Long roleId, Long permissionId);

    /**
     * 确保用户角色关系存在。
     */
    void ensureUserRole(Long userId, Long roleId);

    /**
     * 查询用户全部启用权限码。
     */
    List<String> listActivePermissionCodesByUserId(Long userId);
}
