Обновления системы после анализа и оптимизации архитектуры

- Обновлена схема Prisma с новыми полями и связями
- Актуализированы правила системы в rules-complete.md
- Оптимизированы GraphQL типы, запросы и мутации
- Улучшены компоненты интерфейса и валидация данных
- Исправлены критические ESLint ошибки: удалены неиспользуемые импорты и переменные
- Добавлены тестовые файлы для проверки функционала

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-06 23:44:49 +03:00
parent c2b342a527
commit 10af6f08cc
33 changed files with 3259 additions and 1319 deletions

View File

@ -36,6 +36,9 @@ export const typeDefs = gql`
# Расходники селлеров (материалы клиентов)
mySupplies: [Supply!]!
# Доступные расходники для рецептур селлеров (только с ценой и в наличии)
getAvailableSuppliesForRecipe: [SupplyForRecipe!]!
# Расходники фулфилмента (материалы для работы фулфилмента)
myFulfillmentSupplies: [Supply!]!
@ -173,10 +176,8 @@ export const typeDefs = gql`
updateService(id: ID!, input: ServiceInput!): ServiceResponse!
deleteService(id: ID!): Boolean!
# Работа с расходниками
createSupply(input: SupplyInput!): SupplyResponse!
updateSupply(id: ID!, input: SupplyInput!): SupplyResponse!
deleteSupply(id: ID!): Boolean!
# Работа с расходниками (только обновление цены разрешено)
updateSupplyPrice(id: ID!, input: UpdateSupplyPriceInput!): SupplyResponse!
# Использование расходников фулфилмента
useFulfillmentSupplies(input: UseFulfillmentSuppliesInput!): SupplyResponse!
@ -278,6 +279,7 @@ export const typeDefs = gql`
ogrn: String
ogrnDate: DateTime
type: OrganizationType!
market: String
status: String
actualityDate: DateTime
registrationDate: DateTime
@ -335,6 +337,9 @@ export const typeDefs = gql`
bik: String
accountNumber: String
corrAccount: String
# Рынок для поставщиков
market: String
}
input FulfillmentRegistrationInput {
@ -516,38 +521,45 @@ export const typeDefs = gql`
id: ID!
name: String!
description: String
price: Float!
quantity: Int!
unit: String
category: String
status: String
date: DateTime!
supplier: String
minStock: Int
currentStock: Int
usedStock: Int
# Новые поля для Services архитектуры
pricePerUnit: Float # Цена за единицу для рецептур (может быть null)
unit: String! # Единица измерения: "шт", "кг", "м"
warehouseStock: Int! # Остаток на складе (readonly)
isAvailable: Boolean! # Есть ли на складе (влияет на цвет)
warehouseConsumableId: ID! # Связь со складом
# Поля из базы данных для обратной совместимости
price: Float! # Из Prisma schema
quantity: Int! # Из Prisma schema
category: String! # Из Prisma schema
status: String! # Из Prisma schema
date: DateTime! # Из Prisma schema
supplier: String! # Из Prisma schema
minStock: Int! # Из Prisma schema
currentStock: Int! # Из Prisma schema
usedStock: Int! # Из Prisma schema
type: String! # Из Prisma schema (SupplyType enum)
sellerOwnerId: ID # Из Prisma schema
sellerOwner: Organization # Из Prisma schema
shopLocation: String # Из Prisma schema
imageUrl: String
type: SupplyType!
sellerOwner: Organization # Селлер-владелец (для расходников селлеров)
shopLocation: String # Местоположение в магазине фулфилмента
createdAt: DateTime!
updatedAt: DateTime!
organization: Organization!
}
input SupplyInput {
# Для рецептур селлеров - только доступные с ценой
type SupplyForRecipe {
id: ID!
name: String!
description: String
price: Float!
quantity: Int!
pricePerUnit: Float! # Всегда не null
unit: String!
category: String!
status: String!
date: DateTime!
supplier: String!
minStock: Int!
currentStock: Int!
imageUrl: String
warehouseStock: Int! # Всегда > 0
}
# Для обновления цены расходника в разделе Услуги
input UpdateSupplyPriceInput {
pricePerUnit: Float # Может быть null (цена не установлена)
}
input UseFulfillmentSuppliesInput {
@ -555,6 +567,14 @@ export const typeDefs = gql`
quantityUsed: Int!
description: String # Описание использования (например, "Подготовка 300 продуктов")
}
# Устаревшие типы для обратной совместимости
input SupplyInput {
name: String!
description: String
price: Float!
imageUrl: String
}
type SupplyResponse {
success: Boolean!