import { PrismaClient } from '@prisma/client'; import * as bcrypt from 'bcrypt'; const prisma = new PrismaClient(); // ============================================ // 系统账户定义 // 系统账户使用特殊序列号格式: S + 00000 + 序号 (S0000000001 ~ S0000000004) // ============================================ // ============================================ // 管理员账户定义 // 默认管理员密码: Admin@123456 // ============================================ const ADMIN_ACCOUNTS = [ { email: 'admin@rwadurian.com', password: 'Admin@123456', nickname: '超级管理员', role: 'super_admin', }, ]; const SYSTEM_ACCOUNTS = [ { userId: BigInt(1), accountSequence: 'S0000000001', // 总部社区 nickname: '总部社区', referralCode: 'HQ000001', status: 'SYSTEM', }, { userId: BigInt(2), accountSequence: 'S0000000002', // 成本费账户 nickname: '成本费账户', referralCode: 'COST0002', status: 'SYSTEM', }, { userId: BigInt(3), accountSequence: 'S0000000003', // 运营费账户 nickname: '运营费账户', referralCode: 'OPER0003', status: 'SYSTEM', }, { userId: BigInt(4), accountSequence: 'S0000000004', // RWAD底池账户 nickname: 'RWAD底池账户', referralCode: 'POOL0004', status: 'SYSTEM', }, ]; async function main() { console.log('Seeding database...'); // 清理现有数据 await prisma.deadLetterEvent.deleteMany(); await prisma.smsCode.deleteMany(); await prisma.userEvent.deleteMany(); await prisma.deviceToken.deleteMany(); await prisma.walletAddress.deleteMany(); await prisma.userDevice.deleteMany(); await prisma.userAccount.deleteMany(); // 初始化账户序列号生成器 (新格式: D + YYMMDD + 5位序号) await prisma.accountSequenceGenerator.deleteMany(); const today = new Date(); const year = String(today.getFullYear()).slice(-2); const month = String(today.getMonth() + 1).padStart(2, '0'); const day = String(today.getDate()).padStart(2, '0'); const dateKey = `${year}${month}${day}`; await prisma.accountSequenceGenerator.create({ data: { id: 1, dateKey: dateKey, currentSequence: 0, }, }); // 创建系统账户 console.log('Creating system accounts...'); for (const account of SYSTEM_ACCOUNTS) { await prisma.userAccount.upsert({ where: { userId: account.userId }, update: account, create: account, }); console.log(` - Created system account: ${account.nickname} (accountSequence=${account.accountSequence})`); } // 创建管理员账户 console.log('Creating admin accounts...'); for (const admin of ADMIN_ACCOUNTS) { const passwordHash = await bcrypt.hash(admin.password, 10); await prisma.adminAccount.upsert({ where: { email: admin.email }, update: { passwordHash, nickname: admin.nickname, role: admin.role, }, create: { email: admin.email, passwordHash, nickname: admin.nickname, role: admin.role, status: 'ACTIVE', }, }); console.log(` - Created admin account: ${admin.email} (role=${admin.role})`); } console.log('Database seeded successfully!'); console.log(`- Initialized account sequence generator for date ${dateKey}`); console.log(`- Created ${SYSTEM_ACCOUNTS.length} system accounts (S0000000001-S0000000004)`); console.log(`- Created ${ADMIN_ACCOUNTS.length} admin accounts`); } main() .catch((e) => { console.error(e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });