本文档把已经冻结的产品范围、数据模型和 API 方案,进一步落到当前仓库里的具体代码文件上。
它解决 3 个实际执行问题:
- 现有代码哪些部分仍停留在旧
topic / city / generic applications原型 - 新范围应该先改哪些文件,后改哪些文件
- 哪些旧能力先兼容保留,哪些要在新链路稳定后退场
当前主线已经完成以下收敛:
- 公开站 DTO 与 fallback 已切到
Branch / Member / ArticleV2 / EventV2 / Join / About / HomeV2 apps/api/src/lib/public-content.ts与apps/api/src/lib/platform-config.ts已退场packages/shared/src/public-content.ts已收缩为最小公共原语,不再承载旧Topic / City / PublicApplication兼容 DTOpackages/db/src/seed.ts已改为围绕当前分会、成员、文章、活动主线生成演示数据packages/db/src/schema/index.ts与packages/db/drizzle/0003_unique_wilson_fisk.sql已移除旧topics / cities / applications / featured_blocks / site_settings主线依赖apps/api/src/lib/admin-content.ts已收缩为文章与资源管理的最小实现packages/shared/src/admin-content.ts已删除旧Topic / Event / Application后台兼容 DTO
当前遗留仅剩:
- Drizzle 迁移历史文件中仍保留旧表定义,作为历史迁移记录存在
- API 与集成测试中保留对旧公开 / 后台路由返回
404的退场断言
当前仓库已经完成主线收敛,以下内容主要作为状态记录而非待实现清单。
主要文件:
packages/shared/src/public-content.tspackages/shared/src/admin-content.tspackages/shared/src/ui.ts
当前状态:
- 公开 DTO 已全部收敛到
branches / members / articles / events / join / about / home - 后台共享契约已移除旧
topics / cities / featured blocksDTO - 公共导航与后台一级导航都已对齐当前 7 个前台模块和 8 个后台模块
主要文件:
packages/db/src/schema/index.tspackages/db/src/seed.tspackages/db/drizzle/*
当前状态:
- 主实体已经切到
branches、branch_board_members、members、join_applications、site_pages、homepage_sections - Drizzle migration 已补齐旧表退场与
articles.branch_id回填逻辑 - 演示数据已围绕分会、成员、文章、活动、加入申请主线生成
主要文件:
apps/api/src/routes/public.tsapps/api/src/routes/admin.tsapps/api/src/lib/public-content.tsapps/api/src/lib/admin-content.tsapps/api/src/lib/platform-config.tsapps/api/src/lib/access.ts
当前状态:
- 公开 API 已围绕
/home、/branches、/members、/events、/articles、/join、/about收敛 - 后台 API 已提供
/members、/branches、/pages/:slug、/homepage - 仪表盘统计已切到
join_applications等当前主线实体 - 首页配置由
homepage_sections驱动,site-config走共享静态契约
主要文件:
- 前台:
apps/site/src/pages/* - 后台:
apps/admin/src/router.ts、apps/admin/src/lib/navigation.ts、apps/admin/src/views/*
当前状态:
- 前台已提供
/branches、/members、/members/[slug]、/join - 后台旧
topics / featured blocks / site settings页面与路由已退场 - 成员、分会/董事会、首页配置、单页内容页面均已落地
- 先加新能力,再退旧能力,不做大爆炸式重写
members与staff_accounts必须继续完全分离- 当前阶段成员不做登录认证,不补“成员中心”
- 活动报名继续保持开放提交,由后台审核确认
- 后台一级导航必须收敛到 8 个模块,但资源、页面配置等支持能力可以保留为二级页
- 旧
topics / cities / applications路由和表已经退场,后续仅保留退场测试与迁移历史,不再恢复
目标:先把所有上层页面与 API 的“语言”改到正确方向。
涉及文件:
packages/shared/src/ui.tspackages/shared/src/public-content.tspackages/shared/src/admin-content.tspackages/shared/src/index.ts
具体任务:
- 更新
publicNav- 删除
/topics - 删除
/cities - 增加
/branches - 增加
/members - 增加
/join
- 删除
- 更新
adminModules- 一级导航只保留:仪表盘、文章、活动、申请、成员、工作人员、角色、审计日志
- 资源、页面配置、首页配置改为支持页,不再占一级导航
- 更新
implementationMilestones- 把“主题 / 城市”描述改成“分会 / 成员 / 加入 / 关于”
- 在
public-content.ts新增 DTOBranchSummaryBranchDetail或BranchPagePayloadBranchBoardMemberSummaryMemberSummaryMemberDetailJoinPagePayloadAboutPagePayloadJoinApplicationInputJoinApplicationReceipt
- 调整现有 DTO
HomePayloadPublicEventRegistrationInputPublicEventRegistrationReceipt
- 在
admin-content.ts新增 DTOAdminMemberListItemAdminMemberRecordAdminMemberUpsertInputAdminBranchListItemAdminBranchRecordAdminBranchUpsertInputAdminBoardMemberRecordAdminBoardMemberUpsertInputAdminJoinApplicationListItemAdminJoinApplicationRecordAdminSitePageRecordAdminSitePageUpsertInputAdminHomepageSectionsRecord
- 调整后台 DTO
AdminDashboardPayloadAdminEventRegistration*AdminAssetType
完成标准:
- 新的前后台路由与页面命名可以全部从
@tgo/shared得到 - 旧
Topic*、City*、PublicApplication*仅作为过渡兼容存在,不再扩展
目标:先把新主线需要的表、字段和权限准备好。
涉及文件:
packages/db/src/schema/index.tspackages/db/src/seed.tspackages/db/drizzle/*
具体任务:
- 新增表
branchesbranch_board_membersmembersjoin_applicationssite_pageshomepage_sections
- 调整现有表
events新增branch_idevent_registrations新增wechat_idevent_registrations新增noteevent_registrations新增review_notesevent_registrations新增matched_member_idevent_registrations新增submitted_ipevent_registrations新增submitted_user_agent
- 保持兼容
events.city_id第一阶段保留applications第一阶段保留,只是不再扩展featured_blocks、site_settings可以先保留,待新页面配置链路稳定后再考虑收缩
- 更新权限种子
- 新增
page.manage - 新增
branch.manage - 新增
member.manage - 把
registration.read迁移为registration.review - 移除
article.manage、topic.manage、featured_block.manage、settings.manage - 在 seed 中自动清理开发库历史权限与角色绑定
- 新增
- 更新系统角色
- 增加
member_manager - 增加
auditor
- 增加
- 更新演示数据
- 用分会、董事会、成员、加入申请、首页区块替换旧原型演示数据主线
完成标准:
- 新 schema 可通过迁移正常创建
- 种子数据可直接支撑前台 7 模块与后台 8 模块的基本演示
目标:先让前台可以拿到正确的数据结构。
涉及文件:
apps/api/src/lib/public-content.tsapps/api/src/routes/public.tsapps/api/src/lib/platform-config.ts
具体任务:
- 新增公开读取接口
GET /api/public/v1/branchesGET /api/public/v1/membersGET /api/public/v1/members/:slugGET /api/public/v1/joinGET /api/public/v1/aboutPOST /api/public/v1/join-applications
- 调整现有公开接口
GET /api/public/v1/home改为新首页结构GET /api/public/v1/events支持按分会筛选GET /api/public/v1/events/:slug返回更贴近详情页的数据结构POST /api/public/v1/events/:eventId/registrations使用新报名字段
- 过渡兼容
/topics/topics/:slug/cities/cities/:slug/applications
兼容策略:
- 在前台页面全部切换到新接口之前,旧接口可继续保留
- 但旧接口只做兼容,不继续新增字段或页面能力
完成标准:
- 前台 7 个模块都能从 API 获取真实数据
- 加入申请与活动报名都符合“开放提交 + 后台审核”的当前业务规则
目标:让后台具备录入、审核和维护当前业务域的能力。
涉及文件:
apps/api/src/routes/admin.tsapps/api/src/lib/admin-content.tsapps/api/src/lib/platform-config.tsapps/api/src/lib/access.tspackages/db/src/seed.ts
具体任务:
- 新增后台接口
GET /api/admin/v1/membersPOST /api/admin/v1/membersGET /api/admin/v1/members/:idPATCH /api/admin/v1/members/:idGET /api/admin/v1/branchesPOST /api/admin/v1/branchesGET /api/admin/v1/branches/:idPATCH /api/admin/v1/branches/:idGET /api/admin/v1/pages/:slugPATCH /api/admin/v1/pages/:slugGET /api/admin/v1/homepagePATCH /api/admin/v1/homepage
- 调整现有后台接口
/dashboard改成新的统计项/applications切换到join_applications/events/:id/registrations与/registrations/:id使用新审核字段
- 权限收敛
dashboard.readpage.managearticle.readarticle.writearticle.publishbranch.managemember.manageevent.manageregistration.reviewapplication.reviewasset.managestaff.managerole.manageaudit_log.read
- 仪表盘统计调整
- 文章总数
- 活动总数
- 申请总数
- 待审核申请数
- 待审核报名数
- 系统健康状态
- 当前版本号
完成标准:
- 后台 8 个模块均有对应 API 支撑
- API 鉴权与角色矩阵与
docs/auth-and-permission.md一致
目标:把后台控制台改到用户已经确认的 8 模块结构。
涉及文件:
apps/admin/src/router.tsapps/admin/src/lib/navigation.tsapps/admin/src/views/*apps/admin/src/lib/api.ts
具体任务:
- 保留并继续使用
DashboardPage.vueArticlesPage.vueArticleEditorPage.vueEventsPage.vueEventEditorPage.vueEventRegistrationsPage.vueApplicationsPage.vueApplicationDetailPage.vueStaffPage.vueRolesPage.vueAuditLogsPage.vue
- 新增页面
MembersPage.vueMemberEditorPage.vueBranchesPage.vueBranchEditorPage.vueSitePageEditorPage.vueHomepagePage.vue
- 从一级导航退场
TopicsPage.vueTopicEditorPage.vueAssetsPage.vueFeaturedBlocksPage.vueSiteSettingsPage.vue
- 信息架构调整
- “成员”模块下承载成员列表、成员编辑、分会/董事会维护
- “文章”或“站点内容”相关支持页下承载首页、加入页、关于页配置
- 资源库可以保留,但应作为编辑器里的支持能力,不再作为当前产品的一线模块
完成标准:
- 后台导航与
docs/route-map.md一致 - 工作人员可完成文章、活动、申请、成员、分会/董事会、角色、审计相关操作
目标:把公开站点从旧 topics / cities 导航切到新 7 模块。
涉及文件:
apps/site/src/lib/public-api.tsapps/site/src/components/SiteHeader.astroapps/site/src/pages/index.astroapps/site/src/pages/about.astroapps/site/src/pages/apply.astro- 新页面:
apps/site/src/pages/branches/index.astro - 新页面:
apps/site/src/pages/members/index.astro - 新页面:
apps/site/src/pages/members/[slug].astro - 新页面:
apps/site/src/pages/join.astro
具体任务:
- 更新前台 API 调用函数
listBrancheslistMembersgetMembergetJoinPagegetAboutPagesubmitJoinApplication
- 改造现有页面
/首页结构对齐新的HomePayload/about改为组织形式、活动形式、加入方式说明/apply改为正式加入申请表
- 新增页面
/branches/members/members/[slug]/join
- 旧页面退场顺序
- 先从导航移除
/topics与/cities - 新页面稳定后,再删除
apps/site/src/pages/topics/* - 新页面稳定后,再删除
apps/site/src/pages/cities/*
- 先从导航移除
完成标准:
- 前台导航只暴露当前 7 个模块
- 页面表达与目标站参考方向一致
- 活动报名、加入申请都可在本地完整跑通
目标:确保新主线真正闭环,而不是只改页面名字。
涉及文件:
apps/api/test/integration/api.integration.test.tsapps/site测试文件apps/admin测试文件tests/e2e或现有 Playwright 用例
具体任务:
- API 集成测试改造
- 分会列表
- 成员列表与详情
- 加入申请提交
- 活动开放报名与后台审核
- 后台成员与分会维护
- 页面内容配置
- 后台测试改造
- 新导航权限显示
- 成员、分会、申请、报名审核流程
- 前台测试改造
- 首页渲染
/branches/members/join/apply
- 旧原型退场
- 当前台不再依赖
/topics、/cities后,再删除其页面、DTO、API 与种子数据 - 保留旧
topic-cover、city-cover资产类型读取兼容,等历史数据完成迁移后再物理退场
- 当前台不再依赖
完成标准:
- 新主线通过
typecheck、build、关键 API 测试与关键页面 smoke test - 旧原型只在明确无人依赖时才删除
推荐严格按以下顺序推进:
packages/sharedpackages/dbapps/apiapps/adminapps/site- 测试与旧原型退场
原因:
- 共享契约不稳定,前后台都会反复返工
- schema 未落地,API 只能继续围绕旧模型打补丁
- API 未稳定,前后台页面改动会不断重写
从现在开始,实施阶段应同时参考 3 份文档:
docs/schema-adjustment-checklist.mddocs/api-dto-adjustment-checklist.mddocs/implementation-transition-backlog.md
职责划分:
schema-adjustment-checklist.md负责回答“库怎么改”api-dto-adjustment-checklist.md负责回答“契约怎么改”implementation-transition-backlog.md负责回答“具体先改哪些文件、按什么顺序改”