跳到主要内容

CmsKit 系统架构与业务功能

本文档提供CmsKit系统的架构概览和业务功能详细说明,基于代码结构和接口权限进行整理。

系统架构总览

CmsKit采用分层架构设计,主要包含以下几个层次:

架构层次

  1. 领域层(Domain)

    • 包含核心业务逻辑和领域模型
    • 通过领域服务(Manager)实现复杂业务规则
    • 定义领域事件和核心接口
  2. 应用层(Application)

    • 通过应用服务(Service)协调业务流程
    • 实现功能接口
    • 处理数据转换和验证
  3. 接口层(Controllers)

    • 处理HTTP请求
    • 权限控制
    • 参数验证与响应格式化

API 路由概览

用户端路由(/api/cms/*

模块路由前缀说明
文章/文章/api/cms/articles/*文章 CRUD、查询、互动统计
评论/api/cms/comments/*发表评论、查看评论
沸点/api/cms/short-msgs/*发布沸点、查看沸点
标签/api/cms/tags/*查询标签、创建标签
圈子/api/cms/clubs/*圈子列表、圈子详情
投票/api/cms/polls/*参与投票、查看结果
用户关注/api/cms/user-subscribe/*关注/取消关注、关注列表
用户点赞/api/cms/user-like/*点赞/取消点赞
圈子关注/api/cms/club-user/*关注/取消关注圈子
标签关注/api/cms/user-tag/*关注/取消关注标签
用户管理/api/cms/users/*用户资料管理
创作者中心/api/cms/author-center/*文章统计、个人统计
通知/api/cms/notifications/*通知列表、标记已读

管理端路由(/api/cms/admin/*

模块路由前缀说明
文章管理/api/cms/admin/articles/*文章列表、审核、批量审核
评论管理/api/cms/admin/comments/*评论列表、删除、审核
沸点管理/api/cms/admin/short-msgs/*沸点审核、批量审核
标签管理/api/cms/admin/tags/*标签 CRUD、校正数量
圈子管理/api/cms/admin/clubs/*圈子 CRUD
投票管理/api/cms/admin/polls/*投票 CRUD、统计
用户管理/api/cms/admin/users/*用户列表
审核日志/api/cms/admin/audit-logs/*审核操作、审核日志

关键组件

  1. 领域服务(Manager)

    • ArticleManager:文章领域业务逻辑
    • SettingManager:系统设置管理
    • CommentManager:评论领域业务逻辑
  2. 应用服务(Service)

    • ArticleService:文章应用服务
    • CommentService:评论应用服务
    • UserSubscribeService:用户订阅服务
  3. 数据访问(Repository)

    • IAuditBaseRepository:支持审计的仓储接口
  4. 跨领域服务

    • IFileManager:文件管理服务
    • ICacheService:缓存服务
    • IRedisClient:Redis客户端

一、内容管理

1.1 文章/文章管理

路由前缀:

  • 用户端:GET|POST|PUT|DELETE /api/cms/articles/*
  • 管理端:GET|POST|PUT|DELETE /api/cms/admin/articles/*

用户端功能

  • 发布文章:用户可发布文章内容(POST /api/cms/articles - ArticleController.CreateAsync
  • 查看文章列表:浏览已发布的文章(GET /api/cms/articles/query - ArticleController.GetQueryArticleListAsync,允许匿名访问)
  • 查看文章详情:阅读文章全文(GET /api/cms/articles/{id} - ArticleController.GetAsync,允许匿名访问)
  • 编辑文章:用户修改自己的文章内容(PUT /api/cms/articles/{id} - ArticleController.UpdateAsync
  • 删除文章:用户删除自己的文章(DELETE /api/cms/articles/{id} - ArticleController.DeleteAsync
  • 设置评论权限:控制文章是否允许评论(PUT /api/cms/articles/{id}/commentable - ArticleController.UpdateCommentable
  • 查看订阅内容:查看关注用户的文章(GET /api/cms/articles/subscribe - ArticleController.GetSubscribeArticleAsync
  • 查看互动记录:查看文章的浏览记录(GET /api/cms/articles/{id}/interaction-logs - ArticleController.GetUserInteractionLogListAsync
  • 查看互动统计:查看文章互动图表数据(GET /api/cms/articles/{id}/interaction-chart - ArticleController.GetUserInteractionLogChartAsync

管理端功能

  • 文章列表:管理员可查看所有文章(GET /api/cms/admin/articles/all - ArticleController.GetAllArticles,需要"文章列表"权限)
  • 审核文章:审核用户发布的文章(PUT /api/cms/admin/articles/audit - ArticleController.AuditAsync,需要"文章审核"权限)
  • 批量审核:批量处理文章审核(PUT /api/cms/admin/articles/batch-audit - ArticleController.BatchAuditAsync,需要"文章审核"权限)

核心实体

  • Article:文章主体,包含标题、内容、点赞数、书签数等
  • ArticleDraft:文章草稿,存储未发布的内容
  • ArticleTag:文章标签关联,多对多关系
  • UserInteractionLog:用户浏览记录,记录IP和浏览时间

领域服务

  • ArticleManager:实现文章领域逻辑,包括内容验证、状态转换和业务规则执行
  • 主要职责:确保文章内容符合业务规则,处理领域事件,协调不同实体间的交互

1.2 评论管理

路由前缀:

  • 用户端:GET|POST|PUT|DELETE /api/cms/comments/*
  • 管理端:GET|POST|PUT|DELETE /api/cms/admin/comments/*

用户端功能

  • 发表评论:对内容进行评论(POST /api/cms/comments - CommentController.CreateAsync
  • 查看评论:查看内容的评论列表(GET /api/cms/comments/query - CommentController.GetListBySubjectAsync,允许匿名访问)
  • 删除自己的评论:用户删除自己发布的评论(DELETE /api/cms/comments/{id}/mine - CommentController.DeleteMyComment
  • 检查评论权限:检查是否可以评论(GET /api/cms/comments/valid-commentable - CommentController.ValidCommentableAsync
  • 获取评论状态:获取评论开关状态(GET /api/cms/comments/subject-commentable - CommentController.GetSubjectCommentable,允许匿名访问)

管理端功能

  • 评论列表:查看所有评论(GET /api/cms/admin/comments/query - CommentController.GetListAsync,需要"评论列表"权限)
  • 删除评论:删除任意评论(DELETE /api/cms/admin/comments/{id} - CommentController.DeleteAsync,需要"删除评论"权限)
  • 修改评论:修改评论内容(PUT /api/cms/admin/comments/{id} - CommentController.UpdateAsync,需要"评论更新"权限)
  • 审核评论:审核单条评论(PUT /api/cms/admin/comments/audit - CommentController.AuditAsync,需要"评论审核"权限)
  • 批量审核评论:批量审核评论(PUT /api/cms/admin/comments/batch-audit - CommentController.BatchAuditAsync,需要"评论审核"权限)
  • 校正评论数量:纠正内容的评论计数(POST /api/cms/admin/comments/correct-count - CommentController.CorrectedComment,需要"校正评论量"权限)

核心实体

  • Comment:评论实体,包含评论内容、关联ID、用户信息
  • CommentSubjectType:评论对象类型,如文章评论、标签评论等

领域服务

  • CommentManager:实现评论领域逻辑,包括评论权限检查、内容审核规则等
  • 主要职责:确保评论符合业务规则,处理评论统计、通知触发等

1.3 沸点管理

路由前缀:

  • 用户端:GET|POST|PUT|DELETE /api/cms/short-msgs/*
  • 管理端:GET|POST|PUT|DELETE /api/cms/admin/short-msgs/*

用户端功能

  • 获取沸点列表:浏览沸点内容(GET /api/cms/short_msg/query/list - ShortMsgController.GetQueryShortMsgListAsync,支持按用户、圈子、书签筛选,允许匿名访问)
  • 获取关注用户的沸点:获取已关注用户发布的沸点(GET /api/cms/short_msg/follow/list - ShortMsgController.GetFollowShortMsgList
  • 获取单个沸点:查看沸点详情(GET /api/cms/short_msg/{id} - ShortMsgController.GetAsync,允许匿名访问)
  • 发布沸点:用户发布短消息(POST /api/cms/short_msg - ShortMsgController.CreateAsync
  • 编辑沸点:用户修改自己的沸点(PUT /api/cms/short_msg/{id} - ShortMsgController.UpdateAsync
  • 删除沸点:用户删除自己的沸点(DELETE /api/cms/short_msg/{id} - ShortMsgController.DeleteAsync
  • MeiliSearch查询:全文搜索沸点(GET /api/cms/short_msg/query-by-meili - ShortMsgController.GetQueryShortMsgListByMeiliSearchAsync,允许匿名访问)
  • 设置隐私类型:控制沸点的可见范围(PUT /api/cms/short_msg/set-privacy-type - ShortMsgController.SetPrivacyTypeAsync
  • 获取暂存沸点:获取当前用户的草稿沸点(GET /api/cms/short_msg/draft - ShortMsgController.GetDraftAsync

管理端功能

  • 获取审核列表:查看待审核沸点列表(GET /api/cms/admin/short-msg/audit/list - ShortMsgController.GetListAsync,需要"沸点列表"权限)
  • 审核沸点:审核单条沸点(PUT /api/cms/admin/short-msg/audit - ShortMsgController.AuditAsync,需要"沸点审核"权限)
  • 批量审核沸点:批量审核多条沸点(PUT /api/cms/admin/short-msg/batch-audit - ShortMsgController.BatchAuditAsync,需要"沸点审核"权限)
  • 设置编辑索引:标记沸点为编辑精选(PUT /api/cms/admin/short-msg/set-editor-index - ShortMsgController.SetEditorIndexAsync,需要"沸点审核"权限)
  • 设置最大编辑索引:将沸点设为最高优先级精选(PUT /api/cms/admin/short-msg/set-max-editor-index/{id} - ShortMsgController.SetMaxEditorIndexAsync,需要"沸点审核"权限)
  • 删除沸点:管理员删除任意沸点(DELETE /api/cms/admin/short-msg/{id} - ShortMsgController.DeleteAsync,需要"删除沸点"权限)
  • 初始化MeiliSearch:将所有沸点索引到搜索引擎(GET /api/cms/admin/short-msg/init-all-shortmsgs - ShortMsgController.InitAllShortMsgsAsync

核心实体

  • ShortMsg:沸点实体,包含内容、标题、热度、点赞数、评论数、书签数等互动数据
  • ShortMsgTopic:沸点与话题的关联表,支持为沸点添加多个话题标签
  • AuditStatus:审核状态枚举,包括:
    • Draft (0):草稿,用户暂存未发布
    • Pending (1):待审核,等待管理员审核
    • Approved (2):已通过,已发布可见
    • Rejected (3):已拒绝,审核未通过
    • Black (4):已拉黑,永久禁止显示

领域服务

  • ShortMsgManager:实现沸点领域逻辑,包括内容验证、热度计算、状态转换等
  • 主要职责:处理沸点特有的业务规则,确保内容质量,管理沸点生命周期

编辑索引与精选

管理员可通过 EditorIndex 字段将优质沸点标记为编辑精选,用户可按"编辑精选"排序查看:

  • EditorIndex:编辑索引值(0表示未精选)
    • 值越大,精选优先级越高
    • 支持通过 set-editor-index 设置具体索引值
    • 支持通过 set-max-editor-index/{id} 将沸点设为最高优先级
  • 热度计算:基于 HotIndex 字段,综合计算浏览、点赞、评论等互动数据

查询参数说明

获取沸点列表 (GET /api/cms/short_msg/query/list) 支持以下参数组合:

参数类型说明
UserIdGuid?按用户ID筛选该用户发布的沸点
ClubIdGuid?按圈子ID筛选圈子内的沸点
BookmarkIdGuid?按书签ID筛选书签集中的沸点,支持公开和私密书签集(私密书签集仅创建者可见)
ShortMsgIdsList?按指定的沸点ID列表筛选
Sortingstring排序方式:New(最新)、Hot(热门)、Editor(编辑精选)
PageNumberint分页页码(默认1)
PageSizeint每页数量(默认10)

使用示例

# 获取用户发布的沸点
GET /api/cms/short_msg/query/list?UserId={userId}&PageNumber=1&PageSize=20

# 获取圈子内的沸点(按热度排序)
GET /api/cms/short_msg/query/list?ClubId={clubId}&Sorting=Hot&PageNumber=1&PageSize=20

# 获取书签中的沸点(支持隐私检查)
GET /api/cms/short_msg/query/list?BookmarkId={bookmarkId}&PageNumber=1&PageSize=20

# 获取关注用户的沸点流
GET /api/cms/short_msg/follow/list?PageNumber=1&PageSize=20

PrivacyType 说明

沸点支持两种隐私模式:

类型说明
Public0公开可见,所有人都可以看到
VisibleOnlyMySelf1仅自己可见,只有作者本人可以看到

设置隐私类型示例

PUT /api/cms/short_msg/set-privacy-type

{
"id": "沸点ID",
"privacyType": 1 // 设置为仅自己可见
}

创建沸点参数

创建或编辑沸点时支持以下参数:

参数类型说明
Titlestring?沸点标题(可选)
Contentstring沸点内容(必填)
TopicIdsList?关联的话题ID列表(最多5个)
AttachmentsList?附件列表(图片、视频等,最多9个)
CommentTypeint评论权限:0(允许所有人)、1(仅粉丝)、2(禁止评论)
PollIdGuid?关联的投票ID(可选)
ClubIdGuid?发布到圈子的ID(可选)
IsDraftbool是否作为草稿保存(true为保存为草稿,false为发布)

示例请求

POST /api/cms/short_msg

{
"title": "分享我的技术心得",
"content": "今天学到了一个有趣的技术点",
"topicIds": ["topic-id-1", "topic-id-2"],
"commentType": 0,
"isDraft": false
}

1.4 标签管理

路由前缀:

  • 用户端:GET|POST|PUT|DELETE /api/cms/tags/*
  • 管理端:GET|POST|PUT|DELETE /api/cms/admin/tags/*

用户端功能

  • 查询标签列表:浏览可用标签(GET /api/cms/tags/query - TagController.GetQueryTagListAsync,允许匿名访问)
  • 查看标签详情:查看单个标签信息(GET /api/cms/tags/{id} - TagController.GetAsync,允许匿名访问)
  • 创建并返回标签:用户创建临时标签(POST /api/cms/tags/create-and-return - TagController.CreateAndReturnTagAsync

管理端功能

  • 标签列表:查看所有标签(GET /api/cms/admin/tags/query - TagController.GetListAsync,需要"所有标签"权限)
  • 创建标签:创建新标签(POST /api/cms/admin/tags - TagController.CreateAsync,需要"新增标签"权限)
  • 编辑标签:修改标签信息(PUT /api/cms/admin/tags/{id} - TagController.UpdateAsync,需要"编辑标签"权限)
  • 删除标签:删除标签(DELETE /api/cms/admin/tags/{id} - TagController.DeleteAsync,需要"删除标签"权限)
  • 校正标签数量:更新标签关联的文章数(POST /api/cms/admin/tags/correct-count - TagController.CorrectedTagCountAsync,需要"校正文章数量"权限)

核心实体

  • Tag:标签实体,包含标签名称、状态、使用数量、关注数量等
  • UserTag:用户关注标签关联表

领域服务

  • TagManager:实现标签领域逻辑,包括标签规范化、去重、合并等
  • 主要职责:维护标签体系,处理标签关联计数,确保标签质量

1.5 圈子管理

路由前缀:

  • 用户端:GET|POST|PUT|DELETE /api/cms/clubs/*
  • 管理端:GET|POST|PUT|DELETE /api/cms/admin/clubs/*

用户端功能

  • 圈子列表:浏览所有圈子(GET /api/cms/clubs/query - ClubController.GetListAsync
  • 我加入的圈子:查看用户已加入的圈子(GET /api/cms/clubs/my - ClubController.GetMyJoinClubListAsync
  • 人气圈子:查看热门圈子(GET /api/cms/clubs/popular - ClubController.GetPopularClubListAsync
  • 推荐圈子:获取推荐圈子列表(GET /api/cms/clubs/recommend - ClubController.GetRecommendClubListAsync
  • 圈子详情:查看圈子详细信息(GET /api/cms/clubs/{id} - ClubController.GetAsync

管理端功能

  • 创建圈子:管理员创建新圈子(POST /api/cms/admin/clubs - ClubController.CreateAsync,需要"新增圈子"权限)
  • 编辑圈子:管理员修改圈子信息(PUT /api/cms/admin/clubs/{id} - ClubController.UpdateAsync,需要"编辑圈子"权限)
  • 删除圈子:管理员删除圈子(DELETE /api/cms/admin/clubs/{id} - ClubController.DeleteAsync,需要"删除圈子"权限)

核心实体

  • Club:圈子实体,包含标题、描述、图标、关注数、消息数等
  • ClubMemberRole:圈子成员角色关联表,统一管理成员关系和角色(包括普通成员、管理员、圈主等)

领域服务

  • ClubManager:实现圈子领域逻辑,包括圈子创建规则、成员管理等
  • 主要职责:维护圈子运作规则,处理圈子相关统计数据

1.6 投票系统

路由前缀:

  • 用户端:GET|POST|PUT|DELETE /api/cms/polls/*
  • 管理端:GET|POST|PUT|DELETE /api/cms/admin/polls/*

用户端功能

  • 参与投票:用户对投票选择选项进行投票(POST /api/cms/polls/{id}/vote - PollController.VoteAsync
  • 查看投票列表:浏览可参与的投票(GET /api/cms/polls/query - PollController.GetListAsync,允许匿名访问)
  • 查看投票结果:查看投票统计结果(GET /api/cms/polls/{id}/result - PollController.GetResultAsync,允许匿名访问但需满足查看条件)
  • 查看投票详情:查看投票的具体信息和选项(GET /api/cms/polls/{id} - PollController.GetAsync,允许匿名访问)
  • 检查是否已投票:检查用户是否已经参与过投票(GET /api/cms/polls/{id}/has-voted - PollController.HasVotedAsync

管理端功能

  • 创建投票:创建新的投票(POST /api/cms/admin/polls - PollController.CreateAsync,需要"创建投票"权限)
  • 编辑投票:修改投票信息(PUT /api/cms/admin/polls/{id} - PollController.UpdateAsync,需要"编辑投票"权限)
  • 删除投票:删除投票(DELETE /api/cms/admin/polls/{id} - PollController.DeleteAsync,需要"删除投票"权限)
  • 投票统计:查看投票参与情况和数据分析(GET /api/cms/admin/polls/{id}/result - PollController.GetResultAsync,需要"查看投票统计"权限)

核心实体

  • Poll:投票主体,包含问题、是否允许多选、投票总数、开始/结束时间等信息
  • PollOption:投票选项,包含选项文本、投票计数、显示顺序等
  • PollUserVote:用户投票记录,记录用户选择的选项和投票时间

领域服务

  • PollService:实现投票应用服务,包括投票创建、查询、投票权限检查、结果统计等
  • 主要职责:确保投票规则符合业务需求,处理投票统计、检查投票有效性和用户参与资格

二、用户互动系统

2.1 用户关注与订阅

路由前缀: GET|POST|DELETE /api/cms/user-subscribe/*

用户端功能

  • 关注用户:关注其他用户(POST /api/cms/user-subscribe - UserSubscribeController.CreateAsync
  • 取消关注:取消关注用户(DELETE /api/cms/user-subscribe/{userId} - UserSubscribeController.DeleteAsync
  • 查询关注状态:检查是否已关注(GET /api/cms/user-subscribe/{userId} - UserSubscribeController.Get,允许匿名访问)
  • 关注列表:查看用户的关注列表(GET /api/cms/user-subscribe/list - UserSubscribeController.GetUserSubscribeList,允许匿名访问)
  • 粉丝列表:查看用户的粉丝列表(GET /api/cms/user-subscribe/fans - UserSubscribeController.GetUserFansList,允许匿名访问)
  • 订阅统计:获取用户关注、粉丝、标签统计(GET /api/cms/user-subscribe/info - UserSubscribeController.GetUserSubscribeInfo,允许匿名访问)

核心实体

  • UserSubscribe:用户关注关系表,记录关注用户的ID和被关注用户的ID

2.2 用户点赞

路由前缀: GET|POST /api/cms/user-like/*

用户端功能

  • 点赞/取消点赞:对内容点赞或取消(POST /api/cms/user-like/toggle - UserLikeController.CreateOrCancelAsync
  • 点赞列表:查看用户点赞记录(GET /api/cms/user-like/query - UserLikeController.GetListAsync

2.3 话题关注

路由前缀: GET|POST|DELETE /api/cms/club-user/*

用户端功能

  • 关注话题:用户关注话题(POST /api/cms/club-user - UserClubController.CreateUserClubAsync
  • 取消关注话题:取消关注话题(DELETE /api/cms/club-user/{clubId} - UserClubController.DeleteUserClubAsync
  • 关注的话题列表:查看用户关注的话题(GET /api/cms/club-user/query - UserClubController.GetUserClubsAsync,允许匿名访问)

2.4 标签关注

路由前缀: GET|POST|DELETE /api/cms/user-tag/*

用户端功能

  • 关注标签:用户关注标签(POST /api/cms/user-tag - UserTagController.CreateUserTagAsync
  • 取消关注标签:取消关注标签(DELETE /api/cms/user-tag/{tagId} - UserTagController.DeleteUserTagAsync
  • 关注的标签列表:查看用户关注的标签(GET /api/cms/user-tag/my-tags - UserTagController.GetSubscribeTags,允许匿名访问)
  • 标签关注者列表:查看关注标签的用户(GET /api/cms/user-tag/{tagId}/subscribers - UserTagController.GetSubscribeTagUsers,允许匿名访问)

核心实体

  • UserTag:用户关注标签关联表,记录用户与标签的关系

三、用户与个人中心

3.1 用户管理

路由前缀:

  • 用户端:GET|POST|PUT /api/cms/users/*
  • 管理端:GET /api/cms/admin/users/*

用户端功能

  • 创建用户画像:开通博客(POST /api/cms/users - UserController.CreateAsync
  • 更新用户资料:修改个人信息(PUT /api/cms/users/{id} - UserController.UpdateAsync
  • 查看用户信息:查看用户资料(GET /api/cms/users/{id} - UserController.GetAsync,允许匿名访问)
  • 新手用户列表:获取新用户列表(GET /api/cms/users/novices - UserController.GetNovicesAsync,允许匿名访问)
  • 同步用户信息:同步身份信息到 CMS(POST /api/cms/users/sync-identity - UserController.SyncIdentityUserToCMS,允许匿名访问)

管理端功能

  • 用户列表:查看所有 CMS 用户(GET /api/cms/admin/users/query - UserController.GetListAsync,需要"CMS 用户"权限)

3.2 创作者中心

路由前缀: GET /api/cms/author-center/*

用户端功能

  • 获取文章统计:获取用户的文章数据统计(GET /api/cms/author-center/article-card - AuthorCenterController.GetArtcileCardAsync
  • 获取个人统计:获取用户内容创作统计(GET /api/cms/author-center/count - AuthorCenterController.CountAsync

核心实体

  • ArticleCardDto:文章统计数据传输对象,包含文章总数、浏览量、点赞数等

四、审核与监控

4.1 审核日志

路由前缀: GET|POST /api/cms/admin/audit-logs/*

管理端功能

  • 审核操作:进行审核操作(POST /api/cms/admin/audit-logs/audit - AuditLogController.AuditAsync,需要"审核日志"权限)
  • 批量审核:批量处理审核(POST /api/cms/admin/audit-logs/batch-audit - AuditLogController.BatchAuditAsync,需要"审核日志"权限)
  • 审核日志列表:查看审核日志(GET /api/cms/admin/audit-logs/query - AuditLogController.GetListAsync,需要"审核日志"权限)

4.2 用户互动记录

路由前缀: GET /api/cms/articles/interaction-logs/*

用户端功能

  • 查看互动记录:查看内容浏览记录(GET /api/cms/articles/{articleId}/interaction-logs - ArticleController.GetUserInteractionLogListAsync
  • 互动统计图表:查看互动数据统计图表(GET /api/cms/articles/{articleId}/interaction-chart - ArticleController.GetUserInteractionLogChartAsync

核心实体

  • UserInteractionLog:用户互动记录,包含IP、地址、互动类型、互动时间等

五、通知系统

路由前缀: GET|PUT /api/cms/notifications/*

5.1 通知生成

  • 系统通过 CAP 消息队列在用户互动(评论、点赞、关注等)时自动生成通知
  • 例如,点赞操作会通过 UserLikeController.PublishUserLikeNotification 方法发布通知

5.2 通知类型

  • 点赞通知:当用户点赞文章或评论时触发
  • 评论通知:当用户评论内容时触发
  • 关注通知:当用户被关注时触发
  • 系统通知:审核结果等系统级通知

用户端功能

  • 获取通知列表:获取用户的通知列表(GET /api/cms/notifications/query - NotificationController.GetListAsync
  • 标记为已读:标记通知为已读状态(PUT /api/cms/notifications/{id}/read - NotificationController.MarkAsReadAsync
  • 批量标记已读:批量标记多个通知为已读(PUT /api/cms/notifications/batch-read - NotificationController.BatchMarkAsReadAsync
  • 获取未读数:获取未读通知数量(GET /api/cms/notifications/unread-count - NotificationController.GetUnreadCountAsync

六、设置系统

6.1 系统设置

  • 通过SettingManager管理系统级设置,如默认审核状态等
  • 设置可以是系统级、用户级或角色级

核心实体

  • Setting:设置实体,包含名称、值、提供者类型等
  • SettingProviderNameEnum:设置提供者类型枚举,如用户(U)、系统(S)、角色(R)

领域服务

  • SettingManager:实现设置领域逻辑,管理不同范围的系统配置
  • 主要职责:提供统一的配置访问接口,处理配置的优先级和继承关系

6.2 缓存管理

功能概述

  • 通过缓存服务提高系统性能
  • 支持分布式缓存和本地缓存策略

核心组件

  • ICacheService:缓存服务接口,提供统一的缓存操作API
  • IRedisClient:Redis客户端,用于分布式缓存实现

6.3 文件管理

功能概述

  • 管理系统中的文件上传、存储和访问
  • 支持多种存储策略(本地、云存储等)

核心组件

  • IFileManager:文件管理接口,处理文件上传和获取
  • CommonAttachmentService:通用附件服务,处理附件关联和元数据

模块间交互与技术选型

1. CAP 事件发布与订阅

  • 在领域层或应用层通过 ICapPublisher 发布领域事件,如发布文章时:
    await _capPublisher.PublishAsync("cms.article.published", articleDto);
  • 其他模块可在启动时订阅事件:
    [CapSubscribe("cms.article.published")]
    public Task HandleArticlePublished(ArticleDto dto) { /* 处理索引、通知、缓存更新 */ }
  • 利用 CAP 保证消息可靠投递和分布式事务(基于 Outbox 模式),在主流程提交数据库后再提交消息。

2. 关键技术选型

FreeSql

  • 轻量级 ORM:无侵入式代码优雅映射,支持代码优先、数据库优先。
  • 动态 SQL:灵活构建复杂查询并兼容多种数据库(MySQL、SQL Server、PostgreSQL 等)。
  • 性能优化:支持分表、分库、延迟加载、二级缓存,提升数据访问效率。

CAP

  • 分布式事件总线:统一消息发布/订阅,支持多种消息中间件(RabbitMQ、Kafka、RocketMQ)。
  • 分布式事务:通过本地事务与消息事务协调,实现最终一致性。
  • 插件化架构:可扩展自定义序列化、错误重试、延迟队列等功能