summaryrefslogtreecommitdiff
path: root/Documentation/source/zh_CN/architecture.rst
blob: 55d5b54a48308aaa4911c0cd65e8ee2338b59232 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
架构
====

分层视图
--------

.. list-table::
   :header-rows: 1
   :widths: 22 34 44

   * - 层
     - 主要文件
     - 职责
   * - 展示层
     - ``src/app/(main)``、``src/components``
     - 渲染公开页面、路由处理器、共享 UI、富文本和布局。
   * - 内容访问层
     - ``src/lib/payload-posts.ts``
     - 查询 Payload,并把 CMS 文档规范化为前端可用的数据结构。
   * - CMS 后台
     - ``payload.config.ts``、``src/payload``
     - 定义内容集合并提供后台管理体验。
   * - 认证与评论
     - ``src/server/auth``、``src/server/comments``
     - 处理 OAuth、会话、评论存储和评论权限。
   * - 数据层
     - ``src/server/db``、``src/migrations``
     - 管理 Drizzle schema、数据库连接和应用迁移。

文章读取流程
------------

1. ``/posts/[slug]`` 页面接收文章 slug。
2. Server Component 调用 ``getPostBySlug``。
3. ``src/lib/payload-posts.ts`` 获取 Payload client 并查询 ``published`` 状态的文章。
4. 原始 Payload 文档被转换为 ``BlogPost``。
5. 页面渲染富文本,并挂载分享、评论等交互。

数据边界
--------

Payload 负责编辑内容和媒体元数据;应用层负责认证、评论、路由行为、UI 状态和集成逻辑。新增功能前应先判断数据归属:编辑内容放入 Payload collection;账号、互动、审核和运营记录放入 Drizzle schema。

已知风险
--------

* 生产环境不应使用 Payload secret 默认值。
* RSS 路径应统一为 ``/rss.xml``。
* 标签统计和搜索索引当前依赖批量读取,内容规模变大后应引入缓存或数据库侧聚合。
* 评论角色策略需要更明确的服务端规则和测试覆盖。