CmsKit 系统架构与业务功能
本文档提供CmsKit系统的架构概览和业务功能详细说明,基于代码结构和接口权限进行整理。
系统架构总览
CmsKit采用分层架构设计,主要包含以下几个层次:
架构层次
-
领域层(Domain)
- 包含核心业务逻辑和领域模型
- 通过领域服务(Manager)实现复杂业务规则
- 定义领域事件和核心接口
-
应用层(Application)
- 通过应用服务(Service)协调业务流程
- 实现功能接口
- 处理数据转换和验证
-
接口层(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/* | 审核操作、审核日志 |
关键组件
-
领域服务(Manager)
- ArticleManager:随笔领域业务逻辑
- SettingManager:系统设置管理
- CommentManager:评论领域业务逻辑
-
应用服务(Service)
- ArticleService:随笔应用服务
- CommentService:评论应用服务
- UserSubscribeService:用户订阅服务
-
数据访问(Repository)
- IAuditBaseRepository:支持审计的仓储接口
-
跨领域服务
- 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/*
用户端功能
- 发布沸点:用户发布短消息(
POST /api/cms/short-msgs-ShortMsgController.CreateAsync) - 查看沸点:浏览沸点内容(
GET /api/cms/short-msgs/query-ShortMsgController.GetListAsync) - 编辑沸点:用户修改自己的沸点(
PUT /api/cms/short-msgs/{id}-ShortMsgController.UpdateAsync) - 删除沸点:用户删除自己的沸点(
DELETE /api/cms/short-msgs/{id}-ShortMsgController.DeleteAsync)
管理端功能
- 审核沸点:审核单条沸点(
PUT /api/cms/admin/short-msgs/audit-ShortMsgController.AuditAsync,需要"沸点审核"权限) - 批量审核沸点:批量审核多条沸点(
PUT /api/cms/admin/short-msgs/batch-audit-ShortMsgController.BatchAuditAsync,需要"沸点审核"权限)
核心实体
- ShortMsg:沸点实体,包含内容、热度、浏览量、点赞数、评论数等
- AuditStatus:审核状态枚举,包括待审核、已通过、已拒绝、已拉黑等
领域服务
- ShortMsgManager:实现沸点领域逻辑,包括内容验证、热度计算等
- 主要职责:处理沸点特有的业务规则,确保内容质量
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)。
- 分布式事务:通过本地事务与消息事务协调,实现最终一致性。
- 插件化架构:可扩展自定义序列化、错误重试、延迟队列等功能