using Dpz.Core.Public.ViewModel.Response;

namespace Dpz.Core.Service.RepositoryService;

public interface ICommentService
{
    /// <summary>
    /// 获取评论
    /// </summary>
    /// <param name="node">评论类型</param>
    /// <param name="relation">关联</param>
    /// <param name="pageIndex"></param>
    /// <param name="pageSize"></param>
    /// <returns></returns>
    Task<IPagedList<CommentViewModel>> GetCommentsAsync(
        CommentNode node,
        string relation,
        int pageIndex = 1,
        int pageSize = 10
    );

    /// <summary>
    /// 获取评论分页
    /// </summary>
    /// <param name="node"></param>
    /// <param name="relation"></param>
    /// <param name="pageIndex"></param>
    /// <param name="pageSize"></param>
    /// <returns></returns>
    Task<IPagedList<VmCommentFlat>> GetPageAsync(
        CommentNode? node,
        string? relation,
        int pageIndex = 1,
        int pageSize = 20
    );

    /// <summary>
    /// 获取有评论的文章ID、标题
    /// </summary>
    /// <returns></returns>
    Task<List<CommentRelationResponse>> HasCommentForArticleAsync();

    /// <summary>
    /// 源码关联
    /// </summary>
    /// <returns></returns>
    Task<List<CommentRelationResponse>> CodeRelationAsync();

    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    Task<List<CommentRelationResponse>> OtherRelationAsync();

    /// <summary>
    /// 获取评论
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<CommentViewModel?> GetComment(string id);

    /// <summary>
    /// 获取评论数量
    /// </summary>
    /// <param name="node"></param>
    /// <param name="relation"></param>
    /// <returns></returns>
    Task<int> GetCommentCountAsync(CommentNode node, string relation);

    /// <summary>
    /// 发表评论
    /// </summary>
    /// <param name="viewModel"></param>
    /// <returns></returns>
    Task PublishCommentAsync(VmPublishComment viewModel);

    /// <summary>
    /// 登录成员发表评论
    /// </summary>
    /// <param name="viewModel"></param>
    /// <returns></returns>
    Task PublishCommentAsync(MembleComment viewModel);

    /// <summary>
    /// 删除评论
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task DeleteAsync(string id);

    /// <summary>
    /// 逻辑删除 清除评论
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task ClearAsync(string id);

    /// <summary>
    /// 删除评论类型下,所有相关评论
    /// </summary>
    /// <param name="node"></param>
    /// <param name="relation"></param>
    /// <returns></returns>
    Task DeleteAsync(CommentNode node, string relation);
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个名为 ICommentService 的接口,定义了评论系统的服务层契约。让我详细解释一下这个接口的功能和结构:

接口概述

这是一个评论服务接口,提供了完整的评论管理功能,包括查询、发布、删除等操作。

主要功能分析

1. 查询功能

// 获取评论列表(分页)
Task<IPagedList<CommentViewModel>> GetCommentsAsync(...)

// 获取扁平化评论分页
Task<IPagedList<VmCommentFlat>> GetPageAsync(...)

// 获取单个评论
Task<CommentViewModel?> GetComment(string id)

// 获取评论数量
Task<int> GetCommentCountAsync(CommentNode node, string relation)

2. 关联查询功能

// 获取有评论的文章信息
Task<List<CommentRelationResponse>> HasCommentForArticleAsync()

// 获取源码相关的评论关联
Task<List<CommentRelationResponse>> CodeRelationAsync()

// 获取其他类型的评论关联
Task<List<CommentRelationResponse>> OtherRelationAsync()

3. 发布功能

// 普通用户发表评论
Task PublishCommentAsync(VmPublishComment viewModel)

// 登录会员发表评论
Task PublishCommentAsync(MembleComment viewModel)

4. 删除功能

// 物理删除评论
Task DeleteAsync(string id)

// 逻辑删除(清除内容但保留记录)
Task ClearAsync(string id)

// 批量删除某个节点下的所有相关评论
Task DeleteAsync(CommentNode node, string relation)

关键参数说明

  • CommentNode: 评论节点类型,用于区分不同类型的评论(如文章评论、源码评论等)
  • relation: 关联标识,通常是被评论对象的ID
  • pageIndex/pageSize: 分页参数
  • id: 评论的唯一标识

设计特点

  1. 异步设计: 所有方法都返回 Task,支持异步操作
  2. 分页支持: 提供了完整的分页查询功能
  3. 多种删除方式: 支持物理删除、逻辑删除和批量删除
  4. 灵活的查询: 支持按节点类型和关联对象查询
  5. 用户区分: 区分普通用户和登录会员的评论发布

这个接口设计得比较完整,涵盖了评论系统的核心功能需求,适用于博客、论坛、内容管理系统等需要评论功能的应用场景。

评论加载中...