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

import com.red.circle.console.infra.database.rds.dto.admin.ResourcePermDTO;
import com.red.circle.console.infra.database.rds.entity.admin.Resource;
import com.red.circle.console.infra.database.rds.enums.AuthTypeEnum;
import com.red.circle.framework.mybatis.service.BaseService;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 资源表 服务类.
 * </p>
 *
 * @author penglinag
 */
public interface ResourceService extends BaseService<Resource> {

  /**
   * 根据用户ID获取用户所有权限
   *
   * @param uid
   * @return
   */
  List<String> listUserPerm(Integer uid);

  /**
   * 获取开放权限资源列表
   *
   * @return
   */
  List<ResourcePermDTO> listOpenPerm();

  /**
   * 获取需要登录权限资源列表
   *
   * @return
   */
  List<ResourcePermDTO> listLoginPerm();

  /**
   * 获取指定类型权限资源列表
   *
   * @param authTypes 类型
   * @return
   */
  List<ResourcePermDTO> listPerm(AuthTypeEnum... authTypes);

  /**
   * 获取用户所有权限
   *
   * @param uid
   * @return
   */
  Set<ResourcePermDTO> setUserResourcePerm(Integer uid);

  /**
   * 获取所有权限
   *
   * @return
   */
  List<ResourcePermDTO> listPerm();

  /**
   * 获取某种请求方式资源权限
   *
   * @param method
   * @return
   */
  List<ResourcePermDTO> listResourcePerms(String method);

  /**
   * 获取资源权限标记
   *
   * @param method
   * @param mapping
   * @return
   */
  String getResourcePermTag(String method, String mapping);

  /**
   * 获取用户菜单资源权限
   *
   * @param uid
   * @return
   */
  List<ResourcePermDTO> listUserMenuResourcePerms(Integer uid);


  /**
   * <p>
   * 批量修改插入
   * </p>
   *
   * @param entityList 实体对象集合
   * @return
   */
  @Override
  boolean saveOrUpdateBatch(Collection<Resource> entityList);
}
