diff --git a/scripts/seed.js b/scripts/seed.js index 480c773..ce88c20 100644 --- a/scripts/seed.js +++ b/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();