package com.red.circle.other.infra.database.mongo.service.user.profile;

import com.red.circle.other.infra.database.mongo.entity.user.profile.UserSpecialId;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户靓号.
 *
 * @author pengliang on 2022/2/16
 */
public interface UserSpecialIdService {

  /**
   * 添加/修改用户靓号.
   */
  void addOrUpdate(UserSpecialId userSpecialId);

  /**
   * 添加.
   */
  void add(UserSpecialId userSpecialId);

  /**
   * 修改.
   */
  void updateSelective(UserSpecialId userSpecialId);

  /**
   * 移除.
   */
  void remove(String id);

  /**
   * 移除过期时间.
   */
  void removeExpiredTime(String sysOrigin, String account);

  /**
   * 是否存在靓号.
   */
  boolean exists(String sysOrigin, String account);

  /**
   * 是否存在用户id.
   */
  boolean existsUserId(Long userId);

  /**
   * 获取指定记录.
   */
  UserSpecialId getById(String Id);

  /**
   * 获取用户靓号信息.
   */
  UserSpecialId getByUserId(Long userId);

  /**
   * 获取平台靓号信息.
   */
  UserSpecialId getUserSpecialId(String sysOrigin, String account);

  /**
   * 获取平台靓号信息.
   */
  List<UserSpecialId> listUserSpecialId(String sysOrigin, Set<String> accounts);

  /**
   * 获取平台靓号信息-集合.
   */
  List<UserSpecialId> listByAccount(String account);

  /**
   * 获取靓号映射信息.
   */
  Map<Long, UserSpecialId> mapByUserIds(Set<Long> userIds);

  /**
   * 流动查询查询用户记录列表，根据lastId分页.
   */
  List<UserSpecialId> flowQuerySelective(String sysOrigin, Long userId, String account,
      Long lastId);

}
