using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;
namespace Dpz.Core.Service.RepositoryService;
public interface IArticleService
{
/// <summary>
/// 获取一定时间内,阅读量靠前的文章
/// </summary>
/// <param name="days"></param>
/// <param name="count"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<List<ArticleMiniResponse>> GetTopArticlesAsync(
int days = -7,
uint count = 8,
CancellationToken cancellationToken = default
);
/// <summary>
/// 随机获取文章
/// </summary>
/// <returns></returns>
Task<List<ArticleMiniResponse>> GetRandomArticlesAsync(
int sample = 8,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取用户发表的文章
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<List<ArticleMiniResponse>> GetPublishArticlesAsync(
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取文章
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">大小</param>
/// <param name="title">标题</param>
/// <param name="account">账号</param>
/// <param name="cancellationToken"></param>
/// <param name="tags">标签</param>
/// <returns></returns>
Task<IPagedList<ArticleMiniResponse>> GetPagesAsync(
int pageIndex = 1,
int pageSize = 20,
string? title = "",
string? account = "",
CancellationToken cancellationToken = default,
params string?[]? tags
);
/// <summary>
/// 获取所有标签
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<List<string>> GetAllTagsAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 获取文章详情
/// </summary>
/// <param name="id"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<ArticleResponse?> GetArticleAsync(
string? id,
CancellationToken cancellationToken = default
);
/// <summary>
/// 查看文章
/// </summary>
/// <param name="id"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task ViewAsync(string id, CancellationToken cancellationToken = default);
/// <summary>
/// 获取最新文章
/// </summary>
/// <param name="range"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<List<ArticleMiniResponse>> GetLatestAsync(
int range = 5,
CancellationToken cancellationToken = default
);
/// <summary>
/// 标题是否存在
/// </summary>
/// <param name="title"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<bool> IsExistsAsync(string title, CancellationToken cancellationToken = default);
/// <summary>
/// 由From 比对 不存在的
/// </summary>
/// <returns></returns>
Task<IReadOnlyCollection<string>> NoExistsByFromAsync(
IReadOnlyCollection<string> feeds,
CancellationToken cancellationToken = default
);
/// <summary>
/// 删除文章
/// </summary>
/// <param name="id"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task DeleteAsync(string id, CancellationToken cancellationToken = default);
/// <summary>
/// 删除旧的CnBeta数据
/// </summary>
/// <param name="month">最多删除几个月前的</param>
/// <param name="limit">按时间倒序,删除的条数</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task DeleteOldCnBetaAsync(int month, int limit, CancellationToken cancellationToken = default);
/// <summary>
/// 创建文章
/// </summary>
/// <param name="article">文章</param>
/// <param name="creator">创建人</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<ArticleResponse> CreateArticleAsync(
CreateArticleRequest article,
VmUserInfo creator,
CancellationToken cancellationToken = default
);
/// <summary>
/// 修改文章
/// </summary>
/// <param name="article">文章</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task EditArticleAsync(
EditArticleRequest article,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取文章总数
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> GetTotalCountAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 获取今日文章总数
/// </summary>
/// <returns></returns>
Task<int> GetTodayCountAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 清除缓存
/// </summary>
ValueTask ClearCacheAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 获取所有作者
/// </summary>
Task<List<string>> GetAllAuthorsAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 更新文章评论数
/// </summary>
/// <param name="articleId">文章ID</param>
/// <param name="count">评论数</param>
/// <param name="cancellationToken"></param>
Task UpdateCommentCountAsync(
string articleId,
int count,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取文章归档(按年月分组,分页)
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">每页大小</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<ArticleArchiveResponse> GetArchivePagedAsync(
int pageIndex = 1,
int pageSize = 50,
CancellationToken cancellationToken = default
);
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个 C# 接口定义文件,定义了文章服务(Article Service)的业务逻辑接口。
整体结构
- 命名空间:
Dpz.Core.Service.RepositoryService - 接口名:
IArticleService - 用途: 定义文章管理系统的所有业务操作契约
主要功能分类
1️⃣ 文章查询功能
| 方法 | 功能 | 关键参数 |
|---|---|---|
GetTopArticlesAsync | 获取热门文章(按阅读量) | days(时间范围)、count(数量) |
GetRandomArticlesAsync | 随机获取文章 | sample(采样数量) |
GetPublishArticlesAsync | 获取用户发表的文章 | - |
GetPagesAsync | 分页查询文章 | 支持标题、账号、标签过滤 |
GetArticleAsync | 获取文章详情 | id(文章ID) |
GetLatestAsync | 获取最新文章 | range(数量范围) |
2️⃣ 文章操作功能
| 方法 | 功能 |
|---|---|
CreateArticleAsync | 创建新文章(需要创建人信息) |
EditArticleAsync | 编辑文章 |
DeleteAsync | 删除指定文章 |
ViewAsync | 记录文章浏览(通常会增加阅读计数) |
3️⃣ 标签与作者管理
GetAllTagsAsync() // 获取所有文章标签
GetAllAuthorsAsync() // 获取所有作者列表
4️⃣ 统计与归档
GetTotalCountAsync() // 获取文章总数
GetTodayCountAsync() // 获取今日新增文章数
GetArchivePagedAsync() // 按年月分组归档(分页)
UpdateCommentCountAsync() // 更新文章评论数
5️⃣ 工具方法
| 方法 | 用途 |
|---|---|
IsExistsAsync | 检查标题是否已存在(防重复) |
NoExistsByFromAsync | 批量检查源链接是否存在(用于数据同步) |
DeleteOldCnBetaAsync | 清理旧的CnBeta爬虫数据 |
ClearCacheAsync | 清除缓存 |
技术特点
- 异步设计: 所有方法都返回
Task,支持异步调用 - 取消令牌: 每个方法都支持
CancellationToken,可中断长时间操作 - 分页支持: 返回类型使用
IPagedList<T>实现分页 - 可空参数: 使用
?标记可空类型(如string?) - 默认参数: 大部分参数提供默认值,简化调用
典型使用场景
// 示例1: 获取热门文章(最近7天,前8篇)
var topArticles = await articleService.GetTopArticlesAsync();
// 示例2: 分页查询带标签过滤
var pagedResult = await articleService.GetPagesAsync(
pageIndex: 1,
pageSize: 20,
tags: new[] { "C#", ".NET" }
);
// 示例3: 创建文章
var newArticle = await articleService.CreateArticleAsync(
createRequest,
currentUser
);
这个接口设计遵循了 SOLID 原则 中的接口隔离原则,清晰地定义了文章管理的所有业务能力。
AI 正在分析代码…
评论加载中...