feat: 个人记账与预算管理系统 MVP 初始版本
This commit is contained in:
@@ -0,0 +1,205 @@
|
||||
// Initialize test data
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log('🚀 开始初始化测试数据...');
|
||||
|
||||
// 1. 创建测试用户
|
||||
console.log('📝 创建测试用户...');
|
||||
const user = await prisma.user.create({
|
||||
data: {
|
||||
name: '测试用户',
|
||||
email: 'test@example.com',
|
||||
},
|
||||
});
|
||||
console.log(`✅ 用户创建成功: ${user.name} (ID: ${user.id})`);
|
||||
|
||||
// 2. 创建测试账户
|
||||
console.log('💰 创建测试账户...');
|
||||
const accounts = await Promise.all([
|
||||
prisma.account.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
name: '支付宝',
|
||||
type: 'payment',
|
||||
color: '#1890FF',
|
||||
balance: 5000,
|
||||
},
|
||||
}),
|
||||
prisma.account.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
name: '微信钱包',
|
||||
type: 'payment',
|
||||
color: '#52C41A',
|
||||
balance: 3000,
|
||||
},
|
||||
}),
|
||||
prisma.account.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
name: '招商银行',
|
||||
type: 'bank',
|
||||
color: '#FAAD14',
|
||||
balance: 10000,
|
||||
},
|
||||
}),
|
||||
]);
|
||||
console.log(`✅ ${accounts.length} 个账户创建成功`);
|
||||
|
||||
// 3. 创建测试交易记录
|
||||
console.log('📊 创建测试交易记录...');
|
||||
const today = new Date();
|
||||
|
||||
const records = await Promise.all([
|
||||
// 收入记录
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[0].id,
|
||||
type: 'income',
|
||||
amount: 8500,
|
||||
category: '工资',
|
||||
description: '2026年4月工资',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), 1),
|
||||
},
|
||||
}),
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[2].id,
|
||||
type: 'income',
|
||||
amount: 500,
|
||||
category: '奖金',
|
||||
description: '绩效奖金',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), 5),
|
||||
},
|
||||
}),
|
||||
|
||||
// 支出记录
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[0].id,
|
||||
type: 'expense',
|
||||
amount: 68,
|
||||
category: '餐饮',
|
||||
description: '午饭',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), today.getDate()),
|
||||
},
|
||||
}),
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[1].id,
|
||||
type: 'expense',
|
||||
amount: 25,
|
||||
category: '交通',
|
||||
description: '打车',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), today.getDate()),
|
||||
},
|
||||
}),
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[0].id,
|
||||
type: 'expense',
|
||||
amount: 299,
|
||||
category: '购物',
|
||||
description: '买衣服',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), today.getDate() - 2),
|
||||
},
|
||||
}),
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[1].id,
|
||||
type: 'expense',
|
||||
amount: 128,
|
||||
category: '娱乐',
|
||||
description: '游戏充值',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), today.getDate() - 3),
|
||||
},
|
||||
}),
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[0].id,
|
||||
type: 'expense',
|
||||
amount: 38,
|
||||
category: '餐饮',
|
||||
description: '星巴克',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), today.getDate() - 4),
|
||||
},
|
||||
}),
|
||||
prisma.record.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
accountId: accounts[1].id,
|
||||
type: 'expense',
|
||||
amount: 150,
|
||||
category: '娱乐',
|
||||
description: '电影票',
|
||||
date: new Date(today.getFullYear(), today.getMonth(), today.getDate() - 5),
|
||||
},
|
||||
}),
|
||||
]);
|
||||
console.log(`✅ ${records.length} 条交易记录创建成功`);
|
||||
|
||||
// 4. 创建测试预算
|
||||
console.log('📋 创建测试预算...');
|
||||
const budgets = await Promise.all([
|
||||
prisma.budget.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
category: '餐饮',
|
||||
amount: 1500,
|
||||
month: `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`,
|
||||
},
|
||||
}),
|
||||
prisma.budget.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
category: '交通',
|
||||
amount: 500,
|
||||
month: `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`,
|
||||
},
|
||||
}),
|
||||
prisma.budget.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
category: '购物',
|
||||
amount: 1000,
|
||||
month: `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`,
|
||||
},
|
||||
}),
|
||||
prisma.budget.create({
|
||||
data: {
|
||||
userId: user.id,
|
||||
category: '娱乐',
|
||||
amount: 500,
|
||||
month: `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`,
|
||||
},
|
||||
}),
|
||||
]);
|
||||
console.log(`✅ ${budgets.length} 个预算创建成功`);
|
||||
|
||||
console.log('\n🎉 测试数据初始化完成!');
|
||||
console.log('\n📌 使用信息:');
|
||||
console.log(`- User ID: ${user.id}`);
|
||||
console.log(`- Email: ${user.email}`);
|
||||
console.log(`- 账户数: ${accounts.length}`);
|
||||
console.log(`- 记录数: ${records.length}`);
|
||||
console.log(`- 预算数: ${budgets.length}`);
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error('❌ 初始化失败:', e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user