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

136 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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',
},
{
userId: BigInt(5),
accountSequence: 'D25122100000', // 种子用户 (序号0真实用户从1开始)
nickname: '种子用户',
referralCode: 'SEED01',
status: 'ACTIVE', // 必须是 ACTIVE 才能作为推荐人
},
];
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-S0000000005)`);
console.log(`- Created ${ADMIN_ACCOUNTS.length} admin accounts`);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});