package com.red.circle.other.infra.database.rds.service.dynamic;


import com.red.circle.framework.dto.PageQuery;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.mybatis.service.BaseService;
import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicComment;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 动态-朋友圈评论 服务类.
 * </p>
 *
 * @author pengshigang
 * @since 2022-04-11
 */
public interface DynamicCommentService extends BaseService<DynamicComment> {


  /**
   * 获得分页数据
   *
   * @param pageNumber 第几页
   * @param contentId  动态内容ID
   */
  PageResult<DynamicComment> pageByTimeDesc(PageQuery pageQuery, Long contentId);

  /**
   * 分页查询根评论（按时间倒序）
   *
   * @param pageQuery 分页参数
   * @param contentId 动态内容ID
   */
  PageResult<DynamicComment> pageRootCommentsByTimeDesc(PageQuery pageQuery, Long contentId);

  /**
   * 分页查询子评论（按时间倒序）
   *
   * @param pageQuery     分页参数
   * @param rootCommentId 根评论ID
   */
  PageResult<DynamicComment> pageChildCommentsByTimeDesc(PageQuery pageQuery, Long rootCommentId);

  /**
   * 获得子评论数
   *
   * @param rootCommentId 根评论id
   * @param notUserId     过滤该用户id
   * @return 数量
   */
  Integer getNumberByRootIdByNotUserId(Long rootCommentId, Long notUserId);

  /**
   * 获得子评论
   *
   * @param rootCommentId 根评论id
   * @param notUserId     过滤该用户id
   * @return list
   */
  List<DynamicComment> listNumberByRootIdByNotUserId(Long rootCommentId, Long notUserId);

  /**
   * 获得子评论数
   *
   * @param rootCommentId 根评论id
   * @return 数量
   */
  Integer getNumberByRootId(Long rootCommentId);

  /**
   * 动态评论数量
   *
   * @param dynamicId 动态id
   * @return 数量
   */
  Integer getNumberByDynamicId(Long dynamicId);

  /**
   * 根据根评论id删除评论
   *
   * @param rootCommentId 根评论id
   */
  void deleteByRootCommentId(Long rootCommentId);

  /**
   * 根据回复评论id删除
   *
   */
  void deleteByReplyCommentId(Long rootCommentId);

  /**
   * 根据评论id删除评论
   *
   * @param id 评论id
   */
  void deleteById(Long id);

  /**
   * 分页查询根评论（按热度排序）
   *
   * @param pageQuery 分页参数
   * @param contentId 动态内容ID
   */
  PageResult<DynamicComment> pageRootCommentsByHotScore(PageQuery pageQuery, Long contentId);

  /**
   * 根据动态ID获得动态评论数量
   *
   * @param contentIds 动态内容ID
   */
  Map<Long, Integer> mapCommentQuantity(Collection<Long> contentIds);

  /**
   * 批量获取根评论的子评论数量
   *
   * @param rootCommentIds 根评论ID集合
   * @return Map<根评论ID, 子评论数量>
   */
  Map<Long, Integer> mapChildCommentCount(Collection<Long> rootCommentIds);

  /**
   * 根据评论ID集合批量查询评论
   *
   * @param commentIds 评论ID集合
   * @return Map<评论ID, 评论对象>
   */
  Map<Long, DynamicComment> mapByIds(Collection<Long> commentIds);

}
