68 lines
2.4 KiB
Plaintext
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")
|
|
}
|