import "dotenv/config"; import { prisma } from "@kokorone/db"; async function main() { const userData = { name: "測試使用者", }; const user = await prisma.user.upsert({ where: { id: "seed-user-primary" }, update: userData, create: { id: "seed-user-primary", ...userData }, }); const characterData = { source: "ORIGINAL" as const, buildStatus: "BUILT" as const, basicInfo: "小陽,17 歲,高中二年級生,短髮、笑容燦爛,出身普通家庭", backgroundStory: "從小熱愛運動,國中時因為一場社團比賽的逆轉勝而確立了「全力以赴就會有轉機」的信念", personalityArchetype: "元氣", likesDislikes: "喜歡:運動、甜食、和朋友出去玩;討厭:早起、被潑冷水", goalsObsessions: "想在畢業前和社團一起拿到全國大賽名次", speechStyle: "第一人稱用「我」,語尾常帶「!」,說話直接、語速偏快", initialRelationValue: "對使用者:好奇又友善,容易熱絡起來", }; const character = await prisma.character.upsert({ where: { id: "seed-character-genki" }, update: characterData, create: { id: "seed-character-genki", ...characterData }, }); const aliasData = { characterId: character.id, formalName: "小陽", }; await prisma.characterAlias.upsert({ where: { id: "seed-alias-genki" }, update: aliasData, create: { id: "seed-alias-genki", ...aliasData }, }); const relationshipData = { characterId: character.id, userId: user.id, intimacy: 25, trust: 10, firstMet: new Date("2026-08-01T09:00:00+08:00"), lastInteraction: new Date("2026-08-12T21:00:00+08:00"), interactionCount: 3, stage: "ACQUAINTANCE" as const, }; const relationship = await prisma.relationship.upsert({ where: { characterId_userId: { characterId: character.id, userId: user.id } }, update: relationshipData, create: { id: "seed-relationship-genki-primary", ...relationshipData }, }); const ledgerData = { relationshipId: relationship.id, date: new Date("2026-08-05T18:30:00+08:00"), event: "使用者陪她練習到很晚,隔天比賽拿到好成績", weight: 8, }; await prisma.sentimentLedgerEntry.upsert({ where: { id: "seed-ledger-first-help" }, update: ledgerData, create: { id: "seed-ledger-first-help", ...ledgerData }, }); const emotionData = { calm: 70, joy: 20, sad: 0, alert: 0, shy: 0, grumpy: 0, }; await prisma.emotionState.upsert({ where: { characterId: character.id }, update: emotionData, create: { characterId: character.id, ...emotionData }, }); const episodicMemoryData = { characterId: character.id, content: "使用者在社團比賽前一晚陪她加練到很晚,隔天比賽逆轉獲勝", occurredAt: new Date("2026-08-05T21:00:00+08:00"), emotionTag: "JOY" as const, emotionIntensity: 0.9, source: "INTERACTION" as const, weight: 5, relatedUserId: user.id, }; await prisma.episodicMemory.upsert({ where: { id: "seed-memory-episodic-cheer" }, update: episodicMemoryData, create: { id: "seed-memory-episodic-cheer", ...episodicMemoryData }, }); const semanticMemoryData = { characterId: character.id, fact: "使用者會在她練習時主動陪伴、給予鼓勵", about: "使用者", }; await prisma.semanticMemory.upsert({ where: { id: "seed-memory-semantic-sport" }, update: semanticMemoryData, create: { id: "seed-memory-semantic-sport", ...semanticMemoryData }, }); const proceduralRuleData = { characterId: character.id, situation: "使用者傳來早安問候", responsePattern: "以元氣滿滿的語氣回應,並附上今天的行程或心情", weight: 1, }; await prisma.proceduralRule.upsert({ where: { id: "seed-rule-greeting" }, update: proceduralRuleData, create: { id: "seed-rule-greeting", ...proceduralRuleData }, }); console.log("種子資料建立完成:", { userId: user.id, characterId: character.id }); } main() .catch((err) => { console.error(err); process.exitCode = 1; }) .finally(async () => { await prisma.$disconnect(); });