const { PrismaClient } = require('@prisma/client') const prisma = new PrismaClient() async function testDuplicationFix() { console.log('🧪 Тестируем исправление дублирования Supply записей...') try { // Найдем организацию фулфилмента const fulfillmentOrg = await prisma.organization.findFirst({ where: { type: 'FULFILLMENT' }, select: { id: true, name: true } }) if (!fulfillmentOrg) { console.log('❌ Организация фулфилмента не найдена') return } console.log(`🏢 Организация фулфилмента: ${fulfillmentOrg.name}`) // Получаем текущие Supply записи ПЕРЕД тестом const suppliesBeforeTest = await prisma.supply.findMany({ where: { organizationId: fulfillmentOrg.id, type: 'FULFILLMENT_CONSUMABLES', }, select: { id: true, name: true, article: true, currentStock: true, quantity: true, organizationId: true, }, orderBy: { createdAt: 'desc' }, }) console.log(`\n📦 Supply записи ПЕРЕД тестом (${suppliesBeforeTest.length}):`) suppliesBeforeTest.forEach((supply, index) => { console.log(` ${index + 1}. "${supply.name}" (артикул: ${supply.article})`) console.log(` Остаток: ${supply.currentStock}, Количество: ${supply.quantity}`) console.log(` ID: ${supply.id}`) console.log(` ---`) }) // Найдем пример заказа поставки для тестирования const testOrder = await prisma.supplyOrder.findFirst({ where: { fulfillmentCenterId: fulfillmentOrg.id, status: 'SHIPPED', // Готов для приема }, include: { items: { include: { product: { include: { category: true, }, }, }, }, organization: true, partner: true, }, }) if (!testOrder) { console.log('⚠️ Не найдены заказы поставки в статусе SHIPPED для тестирования') console.log('Создадим тестовый сценарий симуляции логики...') // Создаем симуляцию логики resolver'а для тестирования const mockProduct = { id: 'test-product-id', name: 'Тестовый расходник', article: 'СФ20250814TEST123', // Уникальный артикул description: 'Тестовый расходник для проверки дублирования', category: { name: 'Тестовые расходники' }, } const mockItem = { product: mockProduct, quantity: 5, price: 100.00, } console.log(`\n🔍 Тестируем логику поиска существующего Supply по артикулу: ${mockProduct.article}`) // Ищем существующий Supply по артикулу (как в исправленном resolver'е) const existingSupply = await prisma.supply.findFirst({ where: { organizationId: fulfillmentOrg.id, article: mockProduct.article, // ИСПРАВЛЕНО: поиск по article вместо name type: 'FULFILLMENT_CONSUMABLES', }, }) if (existingSupply) { console.log(`✅ Найден существующий Supply для артикула ${mockProduct.article}:`) console.log(` ID: ${existingSupply.id}`) console.log(` Название: ${existingSupply.name}`) console.log(` Текущий остаток: ${existingSupply.currentStock}`) console.log(` 📈 ОБНОВИЛИ БЫ существующий (НЕ создавали дубликат)`) } else { console.log(`🆕 Supply с артикулом ${mockProduct.article} НЕ найден`) console.log(` 📝 СОЗДАЛИ БЫ новый Supply`) } return } console.log(`\n🎯 Найден тестовый заказ: ${testOrder.id}`) console.log(` Статус: ${testOrder.status}`) console.log(` Товаров: ${testOrder.items.length}`) // Показываем, что логика теперь будет делать для каждого товара console.log(`\n🔍 Анализируем каждый товар из заказа:`) for (const item of testOrder.items) { console.log(`\n📦 Товар: "${item.product.name}"`) console.log(` Артикул: ${item.product.article}`) console.log(` Количество: ${item.quantity}`) // Новая логика: ищем по артикулу const existingSupply = await prisma.supply.findFirst({ where: { organizationId: fulfillmentOrg.id, article: item.product.article, // ИСПРАВЛЕНО: поиск по article вместо name type: 'FULFILLMENT_CONSUMABLES', }, }) if (existingSupply) { console.log(` ✅ НАЙДЕН существующий Supply (НЕ будет дубликата):`) console.log(` ID: ${existingSupply.id}`) console.log(` Текущий остаток: ${existingSupply.currentStock}`) console.log(` 📈 Остаток ОБНОВИТСЯ: ${existingSupply.currentStock} + ${item.quantity} = ${existingSupply.currentStock + item.quantity}`) } else { console.log(` 🆕 НЕ найден существующий Supply`) console.log(` 📝 СОЗДАСТСЯ новый Supply`) } } console.log(`\n✅ РЕЗУЛЬТАТ: Логика теперь использует уникальный артикул для поиска`) console.log(` 🚫 Дублирования НЕ происходит - каждый артикул уникален`) console.log(` 📈 Существующие Supply обновляются по артикулу`) } catch (error) { console.error('❌ Ошибка при тестировании:', error) } finally { await prisma.$disconnect() } } testDuplicationFix()