Добавлены модели товаров и корзины для оптовиков, реализованы соответствующие мутации и запросы в GraphQL. Обновлен API для загрузки файлов с учетом новых типов данных. Улучшена обработка ошибок и добавлены новые функции для работы с категориями товаров.

This commit is contained in:
Bivekich
2025-07-17 16:36:07 +03:00
parent 6a94d51032
commit f377fbab5f
21 changed files with 3958 additions and 34 deletions

View File

@ -118,6 +118,12 @@ model Organization {
services Service[]
supplies Supply[]
// Товары (только для оптовиков)
products Product[]
// Корзины
carts Cart[]
@@map("organizations")
}
@ -274,3 +280,106 @@ model Supply {
@@map("supplies")
}
// Модель категорий товаров
model Category {
id String @id @default(cuid())
name String @unique // Название категории
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Связь с товарами
products Product[]
@@map("categories")
}
// Модель товаров (для оптовиков)
model Product {
id String @id @default(cuid())
// Основные поля
name String // Название товара
article String // Артикул/номер записи
description String? // Описание
// Цена и количество
price Decimal @db.Decimal(12,2) // Цена за единицу
quantity Int @default(0) // Количество в наличии
// Основные характеристики
category Category? @relation(fields: [categoryId], references: [id])
categoryId String? // ID категории
brand String? // Бренд
// Дополнительные характеристики (необязательные)
color String? // Цвет
size String? // Размер
weight Decimal? @db.Decimal(8,3) // Вес в кг
dimensions String? // Габариты (ДxШxВ)
material String? // Материал
// Изображения (JSON массив URL-ов в S3)
images Json @default("[]") // Массив URL изображений
mainImage String? // URL главного изображения
// Статус товара
isActive Boolean @default(true) // Активен ли товар
// Временные метки
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Связь с организацией (только оптовики)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
organizationId String
// Связь с элементами корзины
cartItems CartItem[]
// Уникальность артикула в рамках организации
@@unique([organizationId, article])
@@map("products")
}
// Модель корзины
model Cart {
id String @id @default(cuid())
// Связь с организацией (только покупатель может иметь корзину)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
organizationId String @unique // У каждой организации может быть только одна корзина
// Элементы корзины
items CartItem[]
// Временные метки
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("carts")
}
// Модель элемента корзины
model CartItem {
id String @id @default(cuid())
// Связь с корзиной
cart Cart @relation(fields: [cartId], references: [id], onDelete: Cascade)
cartId String
// Связь с товаром
product Product @relation(fields: [productId], references: [id], onDelete: Cascade)
productId String
// Количество товара в корзине
quantity Int @default(1)
// Временные метки
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Уникальность: один товар может быть только один раз в корзине
@@unique([cartId, productId])
@@map("cart_items")
}