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

import java.util.function.BiFunction;

/**
 * 用户关系相关缓存.
 *
 * @author pengliang on 2021/5/10
 */
public interface UserRelationshipCacheService {

  /**
   * 检测是否是好友关系.
   *
   * @param userId          用户id
   * @param friendUserId    朋友id
   * @param orElseGetAndPut 否则执行函数
   * @return true 是，false 不是
   */
  boolean checkFriend(Long userId, Long friendUserId,
      BiFunction<Long, Long, Boolean> orElseGetAndPut);

  /**
   * 检测是否是关注关系.
   *
   * @param userId          用户id
   * @param followUserId    关注用户id
   * @param orElseGetAndPut 否则执行函数
   * @return true 是，false 不是
   */
  boolean checkFollow(Long userId, Long followUserId,
      BiFunction<Long, Long, Boolean> orElseGetAndPut);

  /**
   * 移除缓存.
   *
   * @param userId          用户id
   * @param relationshipUid 关联用户id
   */
  void removeFollowAll(Long userId, Long relationshipUid);

  /**
   * 移除缓存.
   *
   * @param userId          用户id
   * @param relationshipUid 关联用户id
   */
  void removeFriend(Long userId, Long relationshipUid);

}
