- 建立 pnpm workspace + Turborepo 单仓、ESLint 9/Prettier/commitlint/husky 门禁 - NestJS + Fastify API:统一错误体、trace_id、Zod 管道、/health 真实依赖探活、OpenAPI 3.1 契约 - Prisma 基线:outbox_events/idempotency_keys/system_configs 与首版迁移、幂等种子 - shared 契约包:错误码、权限点、ULID、游标分页、命名/时间工具 - ui 包与 Web 壳层:Semi + Remix 图标统一出口、Cloud Blue 视觉、登录/工作台/错误页 - worker 骨架、Playwright 冒烟、Gitea CI、OpenAPI 快照与 oasdiff 回退脚本 - 补充 A0 实施报告与本地开发说明
This commit is contained in:
1 parent
9c3ab9768a
commit
04f49690f4
155 files changed
+18402
-28
No files matched your search
@@ -0,0 +1,64 @@
|
||||
// 灵犀 Prisma schema(A0 基线)
|
||||
// 依据:docs/工程规范/05-数据库规范.md、技术架构 §5.3 / §5.4.5
|
||||
// 约定:表/列 snake_case;主键 char(26) ULID(应用侧生成);时间 timestamptz;JSON 用 JsonB。
|
||||
// A0 只建平台侧骨架表(outbox_events / idempotency_keys / system_configs);
|
||||
// 身份、客户、行业、脚本、素材等业务表按里程碑在各自模块内新增,禁止跨模块表。
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
/// 事务性发件箱:领域事件先落库,再由 worker 投递(技术架构 §5.3)
|
||||
model OutboxEvent {
|
||||
id String @id @db.Char(26)
|
||||
aggregateType String @map("aggregate_type") @db.VarChar(64)
|
||||
aggregateId String @map("aggregate_id") @db.Char(26)
|
||||
eventType String @map("event_type") @db.VarChar(128)
|
||||
payloadJson Json @map("payload_json") @db.JsonB
|
||||
traceId String? @map("trace_id") @db.VarChar(64)
|
||||
occurredAt DateTime @default(now()) @map("occurred_at") @db.Timestamptz(3)
|
||||
publishedAt DateTime? @map("published_at") @db.Timestamptz(3)
|
||||
attempts Int @default(0)
|
||||
lastError String? @map("last_error") @db.Text
|
||||
|
||||
@@index([publishedAt, occurredAt])
|
||||
@@index([aggregateType, aggregateId])
|
||||
@@map("outbox_events")
|
||||
}
|
||||
|
||||
/// 请求幂等键:任务提交必须带 Idempotency-Key(TTL 24h)
|
||||
model IdempotencyKey {
|
||||
id String @id @db.Char(26)
|
||||
scope String @db.VarChar(64)
|
||||
key String @db.VarChar(128)
|
||||
requestHash String @map("request_hash") @db.VarChar(64)
|
||||
responseStatus Int? @map("response_status")
|
||||
responseBody Json? @map("response_body") @db.JsonB
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
||||
expiresAt DateTime @map("expires_at") @db.Timestamptz(3)
|
||||
|
||||
@@unique([scope, key])
|
||||
@@index([expiresAt])
|
||||
@@map("idempotency_keys")
|
||||
}
|
||||
|
||||
/// 系统配置:阈值 / 上限类数字唯一存放处(PRD R-26),带版本与变更审计
|
||||
model SystemConfig {
|
||||
id String @id @db.Char(26)
|
||||
configKey String @unique @map("config_key") @db.VarChar(128)
|
||||
configValue Json @map("config_value") @db.JsonB
|
||||
valueType String @map("value_type") @db.VarChar(16)
|
||||
description String @default("") @db.VarChar(255)
|
||||
version Int @default(1)
|
||||
isEditable Boolean @default(true) @map("is_editable")
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
|
||||
updatedBy String? @map("updated_by") @db.Char(26)
|
||||
|
||||
@@map("system_configs")
|
||||
}
|
||||
Reference in new issue
Block a user