Добавлены модели товаров и корзины для оптовиков, реализованы соответствующие мутации и запросы в GraphQL. Обновлен API для загрузки файлов с учетом новых типов данных. Улучшена обработка ошибок и добавлены новые функции для работы с категориями товаров.
This commit is contained in:
@ -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")
|
||||
}
|
||||
|
Reference in New Issue
Block a user