fix: завершить V1→V2 миграцию и исправить интерфейс расходников фулфилмента

## 🎯 Основные исправления:

###  Расширен GraphQL тип SupplyCompatible
- Добавлены недостающие поля: article, price, category, status, date
- Добавлены поля: supplier, usedStock, imageUrl, type, organization
- Исправлена ошибка "Cannot query field" для всех фронтенд запросов

###  Исправлены Prisma ошибки в резолверах
- Заменено `deliveryDate: true` → `requestedDeliveryDate: true` в inventory.ts
- Добавлена недостающая функция `checkFulfillmentAccess`
- Устранена ошибка "Unknown field deliveryDate for select statement"

###  Завершена миграция Supply таблицы V1→V2
- Полностью закомментирована модель Supply в Prisma схеме
- Удалены связи supplies/sellerSupplies из Organization
- Сохранена подробная документация миграции в комментариях

## 🧪 Результат:
-  GraphQL сервер работает без ошибок
-  Интерфейс "Расходники фулфилмента" отображается корректно
-  V2 система инвентаря полностью функциональна
-  Обратная совместимость с фронтендом обеспечена

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-09-12 15:46:56 +03:00
parent a7a18970e6
commit 6e684ddc08
3 changed files with 1207 additions and 103 deletions

View File

@ -115,8 +115,9 @@ model Organization {
referrerTransactions ReferralTransaction[] @relation("ReferrerTransactions")
sellerStatsCaches SellerStatsCache[] @relation("SellerStatsCaches")
services Service[]
supplies Supply[]
sellerSupplies Supply[] @relation("SellerSupplies")
// ❌ V1 LEGACY - закомментировано после миграции V1→V2
// supplies Supply[]
// sellerSupplies Supply[] @relation("SellerSupplies")
fulfillmentSupplyOrders SupplyOrder[] @relation("SupplyOrderFulfillmentCenter")
logisticsSupplyOrders SupplyOrder[] @relation("SupplyOrderLogistics")
supplyOrders SupplyOrder[]
@ -169,6 +170,7 @@ model ApiKey {
id String @id @default(cuid())
marketplace MarketplaceType
apiKey String
clientId String? // Для Ozon API
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@ -250,35 +252,45 @@ model Service {
@@map("services")
}
model Supply {
id String @id @default(cuid())
name String
article String
description String?
price Decimal @db.Decimal(10, 2)
pricePerUnit Decimal? @db.Decimal(10, 2)
quantity Int @default(0)
unit String @default("шт")
category String @default("Расходники")
status String @default("planned")
date DateTime @default(now())
supplier String @default("Не указан")
minStock Int @default(0)
currentStock Int @default(0)
usedStock Int @default(0)
imageUrl String?
type SupplyType @default(FULFILLMENT_CONSUMABLES)
sellerOwnerId String?
shopLocation String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
organizationId String
actualQuantity Int?
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
sellerOwner Organization? @relation("SellerSupplies", fields: [sellerOwnerId], references: [id])
@@map("supplies")
}
// ❌ V1 LEGACY MODEL - ЗАКОММЕНТИРОВАНО ПОСЛЕ МИГРАЦИИ НА V2
// Заменено модульной системой:
// - FulfillmentConsumableInventory (расходники ФФ)
// - SellerConsumableInventory (расходники селлера на складе ФФ)
// - SellerGoodsInventory (товары селлера на складе ФФ)
// - FulfillmentConsumable (конфигурация расходников ФФ)
//
// Дата миграции: 2025-09-12
// Статус: V2 система полностью функциональна
//
// model Supply {
// id String @id @default(cuid())
// name String
// article String
// description String?
// price Decimal @db.Decimal(10, 2)
// pricePerUnit Decimal? @db.Decimal(10, 2)
// quantity Int @default(0)
// unit String @default("шт")
// category String @default("Расходники")
// status String @default("planned")
// date DateTime @default(now())
// supplier String @default("Не указан")
// minStock Int @default(0)
// currentStock Int @default(0)
// usedStock Int @default(0)
// imageUrl String?
// type SupplyType @default(FULFILLMENT_CONSUMABLES)
// sellerOwnerId String?
// shopLocation String?
// createdAt DateTime @default(now())
// updatedAt DateTime @updatedAt
// organizationId String
// actualQuantity Int?
// organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
// sellerOwner Organization? @relation("SellerSupplies", fields: [sellerOwnerId], references: [id])
//
// @@map("supplies")
// }
model Category {
id String @id @default(cuid())