Files
Jeffery f44200f543 feat: 完成 B 群組 — 資料層與核心領域模型
- 導入 Prisma 7.9.1 + SQLite(better-sqlite3 driver adapter),prisma.config.ts 管理連線設定
- 完整資料模型:User/Work/Character/CharacterAlias/EpisodicMemory/SemanticMemory/
  ProceduralRule/EmotionState/Relationship/SentimentLedgerEntry
- packages/db:Prisma Client 存取層(ESM,因 Prisma 7 產出的 generated client 僅支援 ESM)
- apps/api 隨之改為 ESM 以相容 packages/db
- packages/shared:新增角色/記憶/情緒/關係共用型別,api 與 web 皆從此匯入
- prisma/seed.ts:建立測試使用者與元氣型測試角色,含完整關係帳本與記憶種子資料
- apps/api:新增 GET /characters
- scripts/smoke/B.mjs:驗證資料表齊全、API 讀出種子角色、關係與記憶可寫入讀出
- 保留 Prisma 官方隨 CLI 附的 agent skill 文件(.agents/skills 等),供後續群組查閱

npm run restart && npm run smoke -- B 皆通過(B-V),A 群組冒煙測試無回歸。
2026-08-13 09:43:15 +08:00

3.3 KiB

schema-contract-mapping

How v6 MongoDB schema concepts map onto Prisma Next's contract model.

Priority

HIGH

Why It Matters

Prisma Next does not consume the v6 schema.prisma as-is: the schema becomes a contract (authored in PSL or TypeScript via the contract builder), and several v6 MongoDB idioms have different — or deliberately absent — equivalents. Translating mechanically without knowing the mapping produces contracts that fail verification or, worse, silently change collection addressing.

The mapping

v6 concept Prisma Next equivalent Notes
datasource db { provider = "mongodb" } + url = env(...) (v6 docs) defineConfig from @prisma-next/mongo/config wiring the mongo family/target/adapter/driver descriptors Next selects MongoDB by importing the @prisma-next/mongo façade, not by a provider string in the schema; prisma-next init accepts mongodb as a target name
@id @default(auto()) @map("_id") @db.ObjectId (using ObjectId) ObjectId-typed id field in the Next contract (PSL or TS builder) Verify the exact attribute surface against the installed Next version's prisma-next-contract skill — the contract builder also exposes index and valueObject
Composite (embedded) types — MongoDB-only in v6 (composite types) Value objects / embedded shapes in the Next contract (valueObject in the Mongo contract builder) Same conceptual role: documents embedded in a parent document
Model names address the client (prisma.user) Collection storage names address the ORM: db.orm.users, i.e. the @@map(...) name or the lowercased model name — not db.orm.User prisma-next skills/prisma-next/SKILL.md, skills/prisma-next-quickstart/SKILL.md; the most common porting mistake
Indexes declared in schema, applied by db push Indexes are contract-declared and applied through migrations (createIndex/dropIndex factories) See migrations-mapping.md
No native polymorphism No schema-layer polymorphism on Mongo either: @@base/@@discriminator are SQL-only in Next; model an explicit discriminator field prisma-next skills/prisma-next-contract/SKILL.md

Bad

// Ported from v6 and addressed by model name:
const user = await db.orm.User.first(); // undefined — Mongo ORM keys are storage names

Good

// Mongo ORM keys are collection storage names (@@map or lowercased model name):
const user = await db.orm.users.first();

Environment requirements

Prisma Next's Mongo target requires MongoDB 8.0+ and mongodb@^7 installed by the user as a peer dependency (prisma-next CHANGELOG.md, 0.11→0.12). v6 supports older MongoDB servers, so check the server version before planning a migration.

References