manicanldes-backend/prisma/catalog.prisma

68 lines
2.4 KiB
Plaintext

enum ProductStatus {
DRAFT
PUBLISHED
ARCHIVED
}
enum GroupKind {
CATEGORY
COLLECTION
}
model Product {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
name String @db.VarChar(160)
slug String @db.VarChar(160)
description String @default("") @db.VarChar(5000)
status ProductStatus @default(DRAFT)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
variants ProductVariant[]
groups ProductGroup[]
@@unique([organizationId, slug])
@@unique([id, organizationId])
@@index([organizationId, status, createdAt, id])
@@map("products")
}
model ProductVariant {
id String @id @default(uuid()) @db.Uuid
productId String @map("product_id") @db.Uuid
organizationId String @map("organization_id") @db.Uuid
sku String @db.VarChar(64)
name String @db.VarChar(160)
price Decimal @db.Decimal(12,2)
currency String @default("INR") @db.Char(3)
attributes Json @default("{}")
active Boolean @default(true)
stockItems StockItem[]
cartLines CartLine[]
orderLines OrderLine[]
product Product @relation(fields: [productId, organizationId], references: [id, organizationId], onDelete: Restrict)
@@unique([organizationId, sku])
@@unique([id, organizationId])
@@index([productId, active])
@@map("product_variants")
}
model CatalogGroup {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
name String @db.VarChar(100)
slug String @db.VarChar(100)
kind GroupKind
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
products ProductGroup[]
@@unique([organizationId, kind, slug])
@@unique([id, organizationId])
@@map("catalog_groups")
}
model ProductGroup {
productId String @map("product_id") @db.Uuid
groupId String @map("group_id") @db.Uuid
organizationId String @map("organization_id") @db.Uuid
product Product @relation(fields: [productId, organizationId], references: [id, organizationId], onDelete: Cascade)
group CatalogGroup @relation(fields: [groupId, organizationId], references: [id, organizationId], onDelete: Restrict)
@@id([productId, groupId])
@@index([groupId, organizationId])
@@map("product_groups")
}