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