数据库结构与 Prisma 迁移
2026-10-15 已接入 Prisma 7.10.0、PostgreSQL adapter 和服务端连接池,Schema 反向映射现有 13 张表、135 个字段。Prisma 模型使用 PascalCase,标量字段 camelCase,通过 map 保留数据库表名和列名;原字符串 ID、字段类型、可空性与默认值不变。客户端仅服务端使用,不向公共契约包或前端导出。
基线与已有数据
migrations/0_v35_baseline/migration.sql 来自已验证的最新 SQL 002/003,合为一个事务,保留 CHECK、C 排序规则、原外键删除规则、两种收藏部分唯一索引及初始配置。CHECK、排序规则及注释不能仅从 Prisma Schema 重建;部分唯一索引由 introspection 加入 partialIndexes 预览声明,实际约束仍以 SQL 为准。
- 新空库:配置正确的 DATABASE_URL,再从项目根运行
pnpm --filter @doodle/server db:deploy。 - 已按 002/003 或完整 004~008 链升级的库:先逐项核对实际结构、配置和数据,再执行
pnpm --filter @doodle/server exec prisma migrate resolve --applied 0_v35_baseline;不重跑建表。 - 检查状态:
pnpm --filter @doodle/server db:status。 - 后续变更:新增迁移,保持已应用基线不变。不要对现有开发库使用 db push/reset,也不要在最新基线之上重复执行历史 004~008。
本地开发库已在完整结构核对后登记基线,新增 _prisma_migrations 技术表,仍为 13 张业务表;已有两条初始配置保留。后续 Prisma 迁移只通过正式新增 migration 变更结构,原 SQL 目录作为历史及设计参考保留。
连接、生成与测试
CLI 由 prisma.config.ts 加载服务端 .env;应用从已验证的 ServerConfig 读取连接串,不搜索根 Compose .env。用户密码等信息不得写入 Schema、迁移或日志。
pnpm --filter @doodle/server prisma:generate 生成忽略提交的 src/generated/prisma;dev/build/typecheck/test 脚本均会先生成。使用 CommonJS 模式匹配现有 NestJS 工程,不引入前端数据库客户端。
pnpm test:db 自动创建随机命名的本机临时库,执行正式迁移,验证微信登录和真实账户鉴权,随后删除临时库;不会清空或写入开发库业务数据。默认 pnpm check 不需要真实数据库。
范围见 服务端登录接入说明,完整模型见 数据库设计,旧 SQL 执行档案见 sql/README。
分类发布状态(2026-10-16)
保持已应用的 0_v35_baseline 不变,新增 20261016000000_category_publication。当前 Schema 为 13 张业务表、136 个字段。既有分类迁移为 active,后续创建默认 draft,增加状态 CHECK 与索引;题型和资源复用现有状态列。本地已 deploy 并核对全部业务数据未改变(分类新增状态除外)。详见 内容发布与可见性。