rwadurian/backend/services/identity-service/prisma/seed.ts

129 lines
3.6 KiB
TypeScript

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();
});