234 lines
7.1 KiB
Plaintext
234 lines
7.1 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
enum UserRole {
|
|
CLIENT
|
|
MANAGER
|
|
}
|
|
|
|
enum RegistrationStatus {
|
|
PENDING
|
|
APPROVED
|
|
REJECTED
|
|
}
|
|
|
|
enum MessengerType {
|
|
TELEGRAM
|
|
MAX
|
|
}
|
|
|
|
enum OrderKind {
|
|
READY
|
|
CALCULATION
|
|
}
|
|
|
|
enum OrderStatus {
|
|
NEW
|
|
MANAGER_PROCESSING
|
|
WAITING_DOUBLE_CONFIRM
|
|
CLIENT_REJECTED
|
|
MANAGER_REJECTED
|
|
MANAGER_BLOCKED
|
|
CONFIRMED
|
|
IN_PROGRESS
|
|
COMPLETED
|
|
}
|
|
|
|
enum WithdrawalStatus {
|
|
PENDING
|
|
APPROVED
|
|
REJECTED
|
|
}
|
|
|
|
model Company {
|
|
id String @id @default(cuid())
|
|
name String @unique
|
|
inn String? @unique
|
|
users User[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
fullName String
|
|
role UserRole
|
|
companyId String?
|
|
company Company? @relation(fields: [companyId], references: [id])
|
|
registrationRequests RegistrationRequest[] @relation("RegistrationRequester")
|
|
reviewedRequests RegistrationRequest[] @relation("RegistrationReviewer")
|
|
sentInvitations Invitation[] @relation("InvitationManager")
|
|
acceptedInvitations Invitation[] @relation("InvitationAcceptor")
|
|
messengerConnections MessengerConnection[]
|
|
clientOrders Order[] @relation("OrderClient")
|
|
managerOrders Order[] @relation("OrderManager")
|
|
orderStatusEvents OrderStatusEvent[]
|
|
referralAsReferrer ReferralLink[] @relation("ReferralReferrer")
|
|
referralAsReferee ReferralLink[] @relation("ReferralReferee")
|
|
bonusTransactions BonusTransaction[]
|
|
withdrawalRequests RewardWithdrawalRequest[] @relation("WithdrawalRequester")
|
|
reviewedWithdrawals RewardWithdrawalRequest[] @relation("WithdrawalReviewer")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model RegistrationRequest {
|
|
id String @id @default(cuid())
|
|
companyName String
|
|
inn String?
|
|
contactName String
|
|
email String
|
|
status RegistrationStatus @default(PENDING)
|
|
rejectionReason String?
|
|
requesterId String?
|
|
requester User? @relation("RegistrationRequester", fields: [requesterId], references: [id])
|
|
reviewedById String?
|
|
reviewedBy User? @relation("RegistrationReviewer", fields: [reviewedById], references: [id])
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Invitation {
|
|
id String @id @default(cuid())
|
|
token String @unique
|
|
email String
|
|
companyName String
|
|
managerId String
|
|
manager User @relation("InvitationManager", fields: [managerId], references: [id])
|
|
acceptedById String?
|
|
acceptedBy User? @relation("InvitationAcceptor", fields: [acceptedById], references: [id])
|
|
expiresAt DateTime
|
|
acceptedAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model MessengerConnection {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
user User @relation(fields: [userId], references: [id])
|
|
type MessengerType
|
|
channelId String
|
|
isActive Boolean @default(true)
|
|
createdAt DateTime @default(now())
|
|
|
|
@@unique([userId, type, channelId])
|
|
}
|
|
|
|
model Product {
|
|
id String @id @default(cuid())
|
|
sku String @unique
|
|
name String
|
|
description String?
|
|
isCustomizable Boolean @default(false)
|
|
isActive Boolean @default(true)
|
|
inventory ProductStock[]
|
|
orderItems OrderItem[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Warehouse {
|
|
id String @id @default(cuid())
|
|
code String @unique
|
|
name String
|
|
inventory ProductStock[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model ProductStock {
|
|
id String @id @default(cuid())
|
|
productId String
|
|
product Product @relation(fields: [productId], references: [id])
|
|
warehouseId String
|
|
warehouse Warehouse @relation(fields: [warehouseId], references: [id])
|
|
availableQty Decimal @db.Decimal(14, 3)
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@unique([productId, warehouseId])
|
|
}
|
|
|
|
model Order {
|
|
id String @id @default(cuid())
|
|
code String @unique
|
|
kind OrderKind
|
|
customerId String
|
|
customer User @relation("OrderClient", fields: [customerId], references: [id])
|
|
managerId String?
|
|
manager User? @relation("OrderManager", fields: [managerId], references: [id])
|
|
status OrderStatus @default(NEW)
|
|
clientApproved Boolean?
|
|
managerApproved Boolean?
|
|
blockReason String?
|
|
deliveryTerms String?
|
|
deliveryFee Decimal? @db.Decimal(14, 2)
|
|
totalPrice Decimal? @db.Decimal(14, 2)
|
|
calculationPayload Json?
|
|
items OrderItem[]
|
|
history OrderStatusEvent[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model OrderItem {
|
|
id String @id @default(cuid())
|
|
orderId String
|
|
order Order @relation(fields: [orderId], references: [id])
|
|
productId String?
|
|
product Product? @relation(fields: [productId], references: [id])
|
|
productName String
|
|
quantity Decimal @db.Decimal(14, 3)
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model OrderStatusEvent {
|
|
id String @id @default(cuid())
|
|
orderId String
|
|
order Order @relation(fields: [orderId], references: [id])
|
|
status OrderStatus
|
|
actorUserId String
|
|
actorUser User @relation(fields: [actorUserId], references: [id])
|
|
note String?
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model ReferralLink {
|
|
id String @id @default(cuid())
|
|
referrerId String
|
|
referrer User @relation("ReferralReferrer", fields: [referrerId], references: [id])
|
|
refereeId String
|
|
referee User @relation("ReferralReferee", fields: [refereeId], references: [id])
|
|
createdAt DateTime @default(now())
|
|
|
|
@@unique([referrerId, refereeId])
|
|
}
|
|
|
|
model BonusTransaction {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
user User @relation(fields: [userId], references: [id])
|
|
amount Decimal @db.Decimal(14, 2)
|
|
reason String
|
|
orderId String?
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model RewardWithdrawalRequest {
|
|
id String @id @default(cuid())
|
|
requesterId String
|
|
requester User @relation("WithdrawalRequester", fields: [requesterId], references: [id])
|
|
amount Decimal @db.Decimal(14, 2)
|
|
status WithdrawalStatus @default(PENDING)
|
|
reviewedById String?
|
|
reviewedBy User? @relation("WithdrawalReviewer", fields: [reviewedById], references: [id])
|
|
reviewComment String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|