package org.lym.pom.service;

import org.lym.pom.repository.mongo.Follow;
import org.shoulder.core.dto.request.BasePageQuery;
import org.shoulder.core.dto.response.PageResult;

/**
 * 关注服务
 *
 * @author lym
 */
public interface FollowService {

    /**
     * 检查用户A是否关注了用户B
     *
     * @param fansUserId       关注者的用户ID
     * @param followeeUserId 被关注者的用户ID
     * @return 是否关注
     */
    boolean isFollow(String fansUserId, String followeeUserId);

    /**
     * 关注某个用户
     *
     * @param fansUserId     粉丝用户ID
     * @param followeeUserId 被关注者的用户ID
     */
    void follow(String fansUserId, String followeeUserId);

    /**
     * 取消关注某个用户
     *
     * @param fansUserId     粉丝用户ID
     * @param followeeUserId 被关注者的用户ID
     */
    void unfollow(String fansUserId, String followeeUserId);

    /**
     * 查询某个用户的关注列表
     *
     * @param pageQuery 查询条件
     * @return result
     */
    PageResult<Follow> pageQueryFollows(BasePageQuery<Follow> pageQuery);

    /**
     * 查询某个用户的被关注列表
     *
     * @param pageQuery 查询条件
     * @return result
     */
    PageResult<Follow> pageQueryFollowed(BasePageQuery<Follow> pageQuery);

    /**
     * 获取某个用户的关注目标数
     *
     * @param fansUserId 用户ID
     * @return 关注数
     */
    long countFollowNumber(String fansUserId);

    /**
     * 获取某个用户的被关注数
     *
     * @param followeeUserId 用户ID
     * @return 被关注数
     */
    long countFansNumber(String followeeUserId);

    //    List<Follow> recommendFollower(String followUserId);
    //    List<Follow> friendFollowers(String userId, String followUserId);
}
