import { prisma } from "@kokorone/db"; const API_PORT = process.env.PORT_API ?? "3001"; export default async function smokeB() { // 資料表齊全:任一張表不存在會直接拋出例外 await Promise.all([ prisma.user.count(), prisma.work.count(), prisma.character.count(), prisma.characterAlias.count(), prisma.episodicMemory.count(), prisma.semanticMemory.count(), prisma.proceduralRule.count(), prisma.emotionState.count(), prisma.relationship.count(), prisma.sentimentLedgerEntry.count(), ]); // 種子角色可由 API 讀出 const res = await fetch(`http://localhost:${API_PORT}/characters`); if (res.status !== 200) { throw new Error(`GET /characters 回傳 ${res.status},預期 200`); } const characters = await res.json(); const seedCharacter = characters.find((c) => c.id === "seed-character-genki"); if (!seedCharacter) { throw new Error("GET /characters 未包含種子角色 seed-character-genki"); } if (!seedCharacter.speechStyle || !seedCharacter.likesDislikes) { throw new Error("種子角色缺少說話方式或喜惡欄位"); } // 關係與記憶可寫入讀出 const relationship = await prisma.relationship.findUnique({ where: { characterId_userId: { characterId: "seed-character-genki", userId: "seed-user-primary" }, }, include: { ledgerEntries: true }, }); if (!relationship || relationship.ledgerEntries.length === 0) { throw new Error("關係帳本讀取失敗或無帳本紀錄"); } const episodicMemory = await prisma.episodicMemory.findFirst({ where: { characterId: "seed-character-genki" }, }); if (!episodicMemory) { throw new Error("情節記憶讀取失敗"); } }