package cn.axzo.msg.center.inside.notices.service;

import cn.axzo.msg.center.domain.dto.CreateModuleDTO;
import cn.axzo.msg.center.domain.dto.MsgModuleDTO;
import cn.axzo.msg.center.domain.dto.SearchModuleDTO;
import cn.axzo.msg.center.domain.dto.SyncModuleDataDTO;
import cn.axzo.msg.center.domain.dto.UpdateModuleDTO;
import cn.axzo.msg.center.domain.entity.MessageModule;
import cn.axzo.msg.center.domain.enums.ModuleBizTypeEnum;
import cn.axzo.msg.center.domain.enums.UserTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 消息模块(MessageModule)表服务接口
 *
 * @author zhangran
 * @since 2022-03-28 14:59:16
 */
public interface MessageModuleService {


  List<MessageModule> listModuleByUserType(UserTypeEnum userTypeEnum);

  List<MsgModuleDTO> listModuleByRelationIdsOrTypeIds(Set<Integer> oldTypeIds, Set<Long> relationIds);

  List<MessageModule> getAllModules();

  MessageModule getModuleById(Long id);

  IPage<MessageModule> page(SearchModuleDTO dto);

  void add(CreateModuleDTO dto);

  void update(UpdateModuleDTO dto);

  void delete(Long id);

  List<MessageModule> getModuleByIds(List<Long> ids);

  Map<Integer, List<Long>> listModuleByBizType();

  void syncData(List<SyncModuleDataDTO> dtoList);

  /**
   * 根据模块名称查询对应的模块列表
   *
   * @param moduleName 模块名称
   * @return 对应的模块列表
   */
  List<MessageModule> listByModuleName(String moduleName);

  /**
   * 通过bizType查询模块id列表
   *
   * @param bizType 业务类型
   * @return 模块id列表
   */
  List<Long> listModuleIdByBizType(ModuleBizTypeEnum bizType);
}
