manicanldes-backend/prisma/inventory.prisma

67 lines
2.9 KiB
Plaintext

enum ReservationStatus {
ACTIVE
RELEASED
COMMITTED
}
model Warehouse {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
name String @db.VarChar(100)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
items StockItem[]
@@unique([organizationId, name])
@@unique([id, organizationId])
@@map("warehouses")
}
model StockItem {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
variantId String @map("variant_id") @db.Uuid
warehouseId String @map("warehouse_id") @db.Uuid
onHand Int @default(0) @map("on_hand")
variant ProductVariant @relation(fields: [variantId, organizationId], references: [id, organizationId], onDelete: Restrict)
warehouse Warehouse @relation(fields: [warehouseId, organizationId], references: [id, organizationId], onDelete: Restrict)
entries StockLedger[]
reservations StockReservation[]
@@unique([variantId, warehouseId])
@@unique([id, organizationId])
@@index([organizationId, id])
@@map("stock_items")
}
model StockLedger {
id String @id @default(uuid()) @db.Uuid
stockItemId String @map("stock_item_id") @db.Uuid
organizationId String @map("organization_id") @db.Uuid
actorId String @map("actor_id") @db.Uuid
actor User @relation(fields: [actorId, organizationId], references: [id, organizationId], onDelete: Restrict)
delta Int
reason String @db.VarChar(200)
idempotencyKey String @map("idempotency_key") @db.Uuid
requestHash String @map("request_hash") @db.Char(64)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
stockItem StockItem @relation(fields: [stockItemId, organizationId], references: [id, organizationId], onDelete: Restrict)
@@unique([organizationId, idempotencyKey])
@@index([stockItemId, createdAt, id])
@@map("stock_ledger")
}
model StockReservation {
id String @id @default(uuid()) @db.Uuid
stockItemId String @map("stock_item_id") @db.Uuid
organizationId String @map("organization_id") @db.Uuid
userId String @map("user_id") @db.Uuid
user User @relation(fields: [userId, organizationId], references: [id, organizationId], onDelete: Restrict)
orderId String? @map("order_id") @db.Uuid
order Order? @relation(fields: [orderId, userId, organizationId], references: [id, userId, organizationId], onDelete: Restrict)
quantity Int
status ReservationStatus @default(ACTIVE)
idempotencyKey String @map("idempotency_key") @db.Uuid
requestHash String @map("request_hash") @db.Char(64)
expiresAt DateTime @map("expires_at") @db.Timestamptz(3)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
stockItem StockItem @relation(fields: [stockItemId, organizationId], references: [id, organizationId], onDelete: Restrict)
@@unique([organizationId, idempotencyKey])
@@index([stockItemId, status, expiresAt])
@@index([userId, organizationId])
@@map("stock_reservations")
}