feat: multi-module iteration
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log('Seeding preV1 data...');
|
||||
|
||||
await prisma.partnerBill.deleteMany();
|
||||
await prisma.storePayout.deleteMany();
|
||||
await prisma.redeemRecord.deleteMany();
|
||||
await prisma.benefitLedger.deleteMany();
|
||||
await prisma.benefitCoupon.deleteMany();
|
||||
await prisma.orderStatusLog.deleteMany();
|
||||
await prisma.orderDelivery.deleteMany();
|
||||
await prisma.payment.deleteMany();
|
||||
await prisma.orderItem.deleteMany();
|
||||
await prisma.order.deleteMany();
|
||||
await prisma.storeAudit.deleteMany();
|
||||
await prisma.storeAccount.deleteMany();
|
||||
await prisma.storeMedia.deleteMany();
|
||||
await prisma.store.deleteMany();
|
||||
await prisma.userCityPreference.deleteMany();
|
||||
await prisma.userAddress.deleteMany();
|
||||
await prisma.user.deleteMany();
|
||||
await prisma.partnerAccount.deleteMany();
|
||||
await prisma.cityCommissionRule.deleteMany();
|
||||
await prisma.city.deleteMany();
|
||||
await prisma.partner.deleteMany();
|
||||
await prisma.product.deleteMany();
|
||||
await prisma.storeCategory.deleteMany();
|
||||
await prisma.hqAccount.deleteMany();
|
||||
|
||||
const partner = await prisma.partner.create({
|
||||
data: {
|
||||
companyName: '郑州城市合伙人',
|
||||
address: '河南省郑州市金水区',
|
||||
contactPhone: '13700000001',
|
||||
bankAccountName: '郑州合伙人公司',
|
||||
bankAccountNo: '6222021234567890',
|
||||
bankBranch: '工商银行郑州分行',
|
||||
},
|
||||
});
|
||||
|
||||
const city = await prisma.city.create({
|
||||
data: {
|
||||
code: '410100',
|
||||
name: '郑州市',
|
||||
province: '河南省',
|
||||
status: 'ACTIVE',
|
||||
partnerId: partner.id,
|
||||
localMinQty: 2,
|
||||
crossMinQty: 6,
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.cityCommissionRule.create({
|
||||
data: {
|
||||
cityId: city.id,
|
||||
orderCommissionRate: 0.05,
|
||||
redeemCommissionRate: 0.03,
|
||||
partnerProfitRate: 0.35,
|
||||
storeSettlementRate: 0.6,
|
||||
},
|
||||
});
|
||||
|
||||
const categories = await Promise.all([
|
||||
prisma.storeCategory.create({ data: { code: 'HOTPOT', name: '火锅', sort: 1 } }),
|
||||
prisma.storeCategory.create({ data: { code: 'LOCAL', name: '地方菜', sort: 2 } }),
|
||||
]);
|
||||
|
||||
const products = await Promise.all([
|
||||
prisma.product.create({
|
||||
data: {
|
||||
skuCode: 'QX-001',
|
||||
name: '杜康·白水古酿 500ml',
|
||||
subtitle: '清香型 52度 礼盒装',
|
||||
aromaType: 'QINGXIANG',
|
||||
spec: '500ml | 52度',
|
||||
price: 599,
|
||||
benefitAmount: 599,
|
||||
status: 'ON_SALE',
|
||||
sortOrder: 1,
|
||||
mainImageUrl: 'https://picsum.photos/seed/dukang1/400/400',
|
||||
},
|
||||
}),
|
||||
prisma.product.create({
|
||||
data: {
|
||||
skuCode: 'QX-002',
|
||||
name: '杜康·年份陈酿(十年)',
|
||||
subtitle: '清香型 42度 纯粮酿造',
|
||||
aromaType: 'QINGXIANG',
|
||||
spec: '500ml | 42度',
|
||||
price: 880,
|
||||
benefitAmount: 880,
|
||||
status: 'ON_SALE',
|
||||
sortOrder: 2,
|
||||
mainImageUrl: 'https://picsum.photos/seed/dukang2/400/400',
|
||||
},
|
||||
}),
|
||||
prisma.product.create({
|
||||
data: {
|
||||
skuCode: 'QX-003',
|
||||
name: '杜康·御享1号 珍藏版',
|
||||
subtitle: '高端定制 限量发售',
|
||||
aromaType: 'QINGXIANG',
|
||||
spec: '500ml | 52度',
|
||||
price: 1299,
|
||||
benefitAmount: 1299,
|
||||
status: 'ON_SALE',
|
||||
sortOrder: 3,
|
||||
mainImageUrl: 'https://picsum.photos/seed/dukang3/400/400',
|
||||
},
|
||||
}),
|
||||
prisma.product.create({
|
||||
data: {
|
||||
skuCode: 'QX-004',
|
||||
name: '杜康·经典传承',
|
||||
subtitle: '清香型 纯粮固态',
|
||||
aromaType: 'QINGXIANG',
|
||||
spec: '500ml | 46度',
|
||||
price: 399,
|
||||
benefitAmount: 399,
|
||||
status: 'ON_SALE',
|
||||
sortOrder: 4,
|
||||
mainImageUrl: 'https://picsum.photos/seed/dukang4/400/400',
|
||||
},
|
||||
}),
|
||||
]);
|
||||
|
||||
await prisma.partnerAccount.create({
|
||||
data: {
|
||||
partnerId: partner.id,
|
||||
phone: '13700000001',
|
||||
name: '郑州合伙人主账号',
|
||||
isPrimary: 1,
|
||||
staffRole: 'PARTNER',
|
||||
},
|
||||
});
|
||||
|
||||
const store1 = await prisma.store.create({
|
||||
data: {
|
||||
cityId: city.id,
|
||||
partnerId: partner.id,
|
||||
categoryId: categories[0].id,
|
||||
name: '郑州老城店',
|
||||
phone: '13910000001',
|
||||
province: '河南省',
|
||||
cityName: '郑州市',
|
||||
district: '金水区',
|
||||
address: '花园路100号',
|
||||
intro: '正宗河南菜,欢迎核销好客权益',
|
||||
coverUrl: 'https://picsum.photos/seed/store1/400/300',
|
||||
status: 'OPEN',
|
||||
openTime: '10:00',
|
||||
closeTime: '22:00',
|
||||
bankAccountName: '郑州老城店',
|
||||
bankAccountNo: '6222029876543210',
|
||||
bankBranch: '建设银行郑州分行',
|
||||
},
|
||||
});
|
||||
|
||||
const store2 = await prisma.store.create({
|
||||
data: {
|
||||
cityId: city.id,
|
||||
partnerId: partner.id,
|
||||
categoryId: categories[1].id,
|
||||
name: '郑州美食城店',
|
||||
phone: '13910000002',
|
||||
province: '河南省',
|
||||
cityName: '郑州市',
|
||||
district: '二七区',
|
||||
address: '大学路200号',
|
||||
intro: '地方特色餐饮',
|
||||
coverUrl: 'https://picsum.photos/seed/store2/400/300',
|
||||
status: 'OPEN',
|
||||
openTime: '10:00',
|
||||
closeTime: '22:00',
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.storeAccount.create({
|
||||
data: { storeId: store1.id, phone: '13910000001', name: '郑州老城店' },
|
||||
});
|
||||
|
||||
await prisma.user.create({
|
||||
data: {
|
||||
userNo: 'DK88293401',
|
||||
phone: '13800000001',
|
||||
nickname: '测试用户',
|
||||
cityPref: {
|
||||
create: {
|
||||
selectedCityCode: '410100',
|
||||
selectedDistrict: '郑州市',
|
||||
locateCityCode: '410100',
|
||||
locateDistrict: '金水区',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.hqAccount.create({
|
||||
data: {
|
||||
phone: '13600000001',
|
||||
name: '总部管理员',
|
||||
adminRole: 'SUPER_ADMIN',
|
||||
},
|
||||
});
|
||||
|
||||
const now = new Date();
|
||||
const periodStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
||||
const periodEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0);
|
||||
await prisma.partnerBill.create({
|
||||
data: {
|
||||
billNo: `PB${Date.now()}`,
|
||||
partnerId: partner.id,
|
||||
periodStart,
|
||||
periodEnd,
|
||||
orderCommission: 1200,
|
||||
redeemCommission: 800,
|
||||
totalAmount: 2000,
|
||||
status: 'UNPAID',
|
||||
confirmedAt: now,
|
||||
},
|
||||
});
|
||||
|
||||
console.log('Seed complete:', {
|
||||
city: city.name,
|
||||
products: products.length,
|
||||
stores: 2,
|
||||
testPhones: {
|
||||
user: '13800000001',
|
||||
store: '13910000001',
|
||||
partner: '13700000001',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user