saveinmed/backoffice/prisma/schema.prisma

81 lines
2 KiB
Text

generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-3.0.x"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum UserRole {
USER
ADMIN
}
enum CompanyStatus {
ACTIVE
INACTIVE
SUSPENDED
}
model Company {
id Int @id @default(autoincrement())
name String
status CompanyStatus @default(ACTIVE)
users User[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model User {
id Int @id @default(autoincrement())
email String @unique
password String
name String
role UserRole @default(USER)
companyId Int
company Company @relation(fields: [companyId], references: [id])
refreshToken String?
orders Order[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Product {
id Int @id @default(autoincrement())
name String
sku String @unique
price Decimal @db.Decimal(10, 2)
inventory InventoryItem?
orders Order[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model InventoryItem {
id Int @id @default(autoincrement())
productId Int @unique
product Product @relation(fields: [productId], references: [id])
quantity Int
updatedAt DateTime @updatedAt
}
model Order {
id Int @id @default(autoincrement())
buyerId Int
productId Int
quantity Int
total Decimal @db.Decimal(12, 2)
buyer User @relation(fields: [buyerId], references: [id])
product Product @relation(fields: [productId], references: [id])
createdAt DateTime @default(now())
}
model SystemSettings {
key String @id
value String
category String @default("GENERAL") // e.g. PAYMENT, SHIPPING
isSecure Boolean @default(false) // If true, should not be returned in plain text unless requested specifically
updatedAt DateTime @updatedAt
}