/** * 仅初始化登录账号。不再写入 M1–M5 / 样例邮件。 * Usage: pnpm db:seed */ import { createHash } from "crypto"; import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); function hashPassword(plain: string): string { return createHash("sha256").update(plain).digest("hex"); } async function main() { const adminUser = process.env.APP_ADMIN_USER || "admin"; const adminPass = process.env.APP_ADMIN_PASS || "admin123"; const opsUser = process.env.APP_OPS_USER || "ops"; const opsPass = process.env.APP_OPS_PASS || "ops123"; await prisma.appUser.upsert({ where: { username: adminUser }, create: { username: adminUser, passwordHash: hashPassword(adminPass), passwordEnc: "", role: "admin", }, update: { passwordHash: hashPassword(adminPass), role: "admin", }, }); await prisma.appUser.upsert({ where: { username: opsUser }, create: { username: opsUser, passwordHash: hashPassword(opsPass), passwordEnc: "", role: "ops", }, update: { passwordHash: hashPassword(opsPass), role: "ops", }, }); const caps = [ { id: "save_container", mode: "live", endpoint: "/Container/SaveContainer" }, { id: "transfer", mode: "mock", endpoint: "/Container/TransferWarehouse" }, { id: "hold_split", mode: "mock", endpoint: "/Container/HoldSplitInstruction" }, { id: "label", mode: "mock", endpoint: "/Container/ApplyLabelInstruction" }, { id: "customer_message", mode: "live", endpoint: "/CustomerMessage/SaveForm", }, { id: "do_upload", mode: "live", endpoint: "/learun/adms/annexes/upload" }, { id: "batch_transfer", mode: "mock", endpoint: "/Container/SaveStockBatchTransfer", }, ]; for (const c of caps) { await prisma.ccWriteCapability.upsert({ where: { id: c.id }, create: c, update: c.id === "customer_message" ? { mode: "live", endpoint: c.endpoint } : {}, }); } const defaultMessageTypes = [ "操作指令", "货件拦截", "拆柜时自动转仓", "客户拆分指令", "扣货", "扣货问题", "收费问题", "查验柜", "PO查验报错", "天灾", "客户新增集装箱", ]; const msgTypeCount = await prisma.ccMessageTypeDict.count(); if (msgTypeCount === 0) { await prisma.ccMessageTypeDict.createMany({ data: defaultMessageTypes.map((name, i) => ({ name, enabled: true, sortOrder: i, })), }); } console.log( `Seed users only: ${adminUser} (admin), ${opsUser} (ops); cc_write_capability seeded; message types ensured`, ); } main() .catch((e) => { console.error(e); process.exit(1); }) .finally(() => prisma.$disconnect());