跳到主要内容

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/*

用户端功能

  • 发布沸点:用户发布短消息(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)。
  • 分布式事务:通过本地事务与消息事务协调,实现最终一致性。
  • 插件化架构:可扩展自定义序列化、错误重试、延迟队列等功能