feat(seed): add demo client orders
This commit is contained in:
107
scripts/seed.js
107
scripts/seed.js
@@ -198,5 +198,112 @@ for (const product of PRODUCT_ROWS) {
|
||||
});
|
||||
}
|
||||
|
||||
const client = await prisma.user.findUnique({
|
||||
where: { email: clientEmail },
|
||||
});
|
||||
|
||||
if (!client) {
|
||||
throw new Error('Demo client was not created.');
|
||||
}
|
||||
|
||||
const seededProducts = await prisma.product.findMany({
|
||||
where: {
|
||||
sku: {
|
||||
in: ['480200', '482500', '753400', '752600'],
|
||||
},
|
||||
},
|
||||
orderBy: { sku: 'asc' },
|
||||
});
|
||||
|
||||
const existingOrderCodes = new Set(
|
||||
(await prisma.order.findMany({
|
||||
where: {
|
||||
code: {
|
||||
in: ['FRG-1001', 'FRG-1002', 'FRG-1003'],
|
||||
},
|
||||
},
|
||||
select: { code: true },
|
||||
})).map((order) => order.code),
|
||||
);
|
||||
|
||||
const demoOrders = [
|
||||
{
|
||||
code: 'FRG-1001',
|
||||
status: 'WAITING_DOUBLE_CONFIRM',
|
||||
deliveryAddress: 'Москва, Ленинградский проспект, 37',
|
||||
deliveryTerms: 'Самовывоз со склада после подтверждения',
|
||||
totalPrice: '125000.00',
|
||||
items: [
|
||||
{ sku: '480200', quantity: '24.000' },
|
||||
{ sku: '752600', quantity: '12.000' },
|
||||
],
|
||||
},
|
||||
{
|
||||
code: 'FRG-1002',
|
||||
status: 'IN_PROGRESS',
|
||||
deliveryAddress: 'Санкт-Петербург, Кубинская улица, 75к1',
|
||||
deliveryTerms: 'Доставка транспортной компанией',
|
||||
totalPrice: '84200.00',
|
||||
items: [
|
||||
{ sku: '482500', quantity: '18.000' },
|
||||
],
|
||||
},
|
||||
{
|
||||
code: 'FRG-1003',
|
||||
status: 'COMPLETED',
|
||||
deliveryAddress: 'Казань, улица Родины, 43',
|
||||
deliveryTerms: 'Доставка до адреса клиента',
|
||||
totalPrice: '156400.00',
|
||||
items: [
|
||||
{ sku: '753400', quantity: '30.000' },
|
||||
{ sku: '482500', quantity: '10.000' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
for (const demoOrder of demoOrders) {
|
||||
if (existingOrderCodes.has(demoOrder.code)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const order = await prisma.order.create({
|
||||
data: {
|
||||
code: demoOrder.code,
|
||||
kind: 'READY',
|
||||
status: demoOrder.status,
|
||||
customerId: client.id,
|
||||
managerId: manager.id,
|
||||
deliveryAddress: demoOrder.deliveryAddress,
|
||||
deliveryTerms: demoOrder.deliveryTerms,
|
||||
totalPrice: demoOrder.totalPrice,
|
||||
},
|
||||
});
|
||||
|
||||
for (const item of demoOrder.items) {
|
||||
const product = seededProducts.find((entry) => entry.sku === item.sku);
|
||||
if (!product) {
|
||||
throw new Error(`Product ${item.sku} not found for demo order ${demoOrder.code}.`);
|
||||
}
|
||||
|
||||
await prisma.orderItem.create({
|
||||
data: {
|
||||
orderId: order.id,
|
||||
productId: product.id,
|
||||
productName: product.name,
|
||||
quantity: item.quantity,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
await prisma.orderStatusEvent.create({
|
||||
data: {
|
||||
orderId: order.id,
|
||||
status: demoOrder.status,
|
||||
actorUserId: manager.id,
|
||||
note: 'Демо-заказ для отображения клиентского кабинета.',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`Seed complete with ${PRODUCT_ROWS.length} products. Use manager header x-user-id: ${manager.id}`);
|
||||
await prisma.$disconnect();
|
||||
|
||||
Reference in New Issue
Block a user