package com.red.circle.console.infra.database.rds.service.admin;

import com.red.circle.console.infra.database.rds.dto.admin.MenuTreeDTO;
import com.red.circle.console.infra.database.rds.entity.admin.Menu;
import com.red.circle.console.infra.database.rds.enums.StatusEnum;
import com.red.circle.framework.mybatis.service.BaseService;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单表 服务类.
 * </p>
 *
 * @author penglinag
 */
public interface MenuService extends BaseService<Menu> {

  /**
   * 获取所有菜单，根据sort排序.
   */
  List<Menu> listAllOrderSort();

  /**
   * 保存菜单.
   */
  void saveMenu(Menu menu, List<String> resourceIds);

  /**
   * 修改菜单.
   */
  void updateMenu(Menu menu, List<String> resourceIds);

  /**
   * 递归删除菜单.
   */
  void removeMenu(Integer menuId);

  /**
   * 修改菜单状态.
   */
  void updateStatus(Integer menuId, StatusEnum status);

  /**
   * 获取用户权限菜单.
   */
  List<MenuTreeDTO> listUserPermMenu(Integer uid);

  /**
   * 获取用户按钮权限.
   */
  Set<String> getUserPermButtonAliases(Integer uid);

  /**
   * 是否有指定的权限
   */
  boolean hasUserButtonAlias(Integer userId, String alias);

}
