feat(seed): add demo client orders

This commit is contained in:
Ruslan Bakiev
2026-04-03 15:59:53 +07:00
parent 2a81abac69
commit f8b470f77d

View File

@@ -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}`); console.log(`Seed complete with ${PRODUCT_ROWS.length} products. Use manager header x-user-id: ${manager.id}`);
await prisma.$disconnect(); await prisma.$disconnect();