package com.red.circle.other.infra.database.cache.service.other;

/**
 * <p>
 * 房间投票.
 * </p>
 *
 * @author pengshigang
 * @since 2022-01-04
 */
public interface GameRoomVoteCacheService {


  /**
   * 获得当前游戏选项票数
   */
  Long getOptionVotes(Long voteId, Long optionId);

  /**
   * 缓存正在PK中的双方对战信息.
   *
   * @param voteId 投票ID
   * @param data   数据
   */
  void cacheRoomVote(Long voteId, String data);

  /**
   * 获取投票信息.
   *
   * @param voteId 投票ID
   * @return ignore
   */
  <T> T getRoomVote(Long voteId, Class<T> clazz);

  /**
   * 删除投票信息缓存.
   */
  void deleteRoomVote(Long voteId);

  /**
   * 标记用户是否在该局投过票
   *
   * @param voteId 游戏id
   * @param userId 用户id
   */
  void cacheSignUserVote(Long voteId, Long userId);

  /**
   * 标记用户是否在该局投过票
   *
   * @param voteId 游戏id
   * @param userId 用户id
   * @return true已投票  false未投票
   */
  Boolean getSignUserVote(Long voteId, Long userId);

  /**
   * 记录用户投票id记录
   *
   * @param voteId    游戏id
   * @param userId    用户id
   * @param optionIds 选择的id
   */
  void cacheUserVoteOptionIds(Long voteId, Long userId, String optionIds);

  /**
   * 记录用户投票id记录
   *
   * @param voteId 游戏id
   * @param userId 用户id
   */
  String getUserVoteOptionIds(Long voteId, Long userId);

}
