356 lines
12 KiB
Plaintext
356 lines
12 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
enum UserRole {
|
|
CLIENT
|
|
MANAGER
|
|
SUPER_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])
|
|
counterpartyProfile CounterpartyProfile?
|
|
deliveryAddresses DeliveryAddress[] @relation("UserDeliveryAddresses")
|
|
defaultDeliveryAddressId String?
|
|
defaultDeliveryAddress DeliveryAddress? @relation("UserDefaultDeliveryAddress", fields: [defaultDeliveryAddressId], references: [id], onDelete: SetNull)
|
|
registrationRequests RegistrationRequest[] @relation("RegistrationRequester")
|
|
reviewedRequests RegistrationRequest[] @relation("RegistrationReviewer")
|
|
sentInvitations Invitation[] @relation("InvitationManager")
|
|
acceptedInvitations Invitation[] @relation("InvitationAcceptor")
|
|
messengerConnections MessengerConnection[]
|
|
cart Cart?
|
|
clientOrders Order[] @relation("OrderClient")
|
|
managerOrders Order[] @relation("OrderManager")
|
|
orderStatusEvents OrderStatusEvent[]
|
|
referralAsReferrer ReferralLink[] @relation("ReferralReferrer")
|
|
referralAsReferee ReferralLink[] @relation("ReferralReferee")
|
|
createdReferralLinks ReferralLink[] @relation("ReferralCreator")
|
|
bonusTransactions BonusTransaction[]
|
|
withdrawalRequests RewardWithdrawalRequest[] @relation("WithdrawalRequester")
|
|
reviewedWithdrawals RewardWithdrawalRequest[] @relation("WithdrawalReviewer")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model DeliveryAddress {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
user User @relation("UserDeliveryAddresses", fields: [userId], references: [id], onDelete: Cascade)
|
|
label String?
|
|
address String
|
|
unrestrictedValue String?
|
|
fiasId String?
|
|
defaultForUsers User[] @relation("UserDefaultDeliveryAddress")
|
|
carts Cart[]
|
|
orders Order[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model CounterpartyProfile {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
user User @relation(fields: [userId], references: [id])
|
|
companyName String
|
|
companyFullName String
|
|
inn String
|
|
kpp String?
|
|
ogrn String?
|
|
legalAddress String
|
|
bankName String
|
|
bik String
|
|
correspondentAccount String
|
|
checkingAccount String
|
|
signerFullName String
|
|
signerPosition String
|
|
signerBasis String
|
|
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
|
|
displayName String?
|
|
username String?
|
|
avatarFileId String?
|
|
avatarFileUniqueId 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
|
|
productType String?
|
|
widthMm Int?
|
|
lengthM Int?
|
|
thicknessMicron Int?
|
|
sleeveBrand String?
|
|
quantityPerBox String?
|
|
tags String[] @default([])
|
|
description String?
|
|
isCustomizable Boolean @default(false)
|
|
isActive Boolean @default(true)
|
|
inventory ProductStock[]
|
|
cartItems CartItem[]
|
|
orderItems OrderItem[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model CatalogProductTypeSetting {
|
|
id String @id @default(cuid())
|
|
productType String @unique
|
|
showQuantityPerBox Boolean @default(false)
|
|
allowCustomLength Boolean @default(false)
|
|
customLengthMinM Int?
|
|
customLengthMaxM Int?
|
|
customLengthStepM Int?
|
|
allowCustomSleeveBrand Boolean @default(false)
|
|
allowCustomLabel Boolean @default(false)
|
|
widthOptionsMm Int[] @default([])
|
|
lengthOptionsM Int[] @default([])
|
|
thicknessOptionsMicron Int[] @default([])
|
|
sleeveOptions String[] @default([])
|
|
colorOptions String[] @default([])
|
|
labelOptions String[] @default([])
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Cart {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
deliveryAddressId String?
|
|
deliveryAddress DeliveryAddress? @relation(fields: [deliveryAddressId], references: [id], onDelete: SetNull)
|
|
items CartItem[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([deliveryAddressId])
|
|
}
|
|
|
|
model CartItem {
|
|
id String @id @default(cuid())
|
|
cartId String
|
|
cart Cart @relation(fields: [cartId], references: [id], onDelete: Cascade)
|
|
productId String
|
|
product Product @relation(fields: [productId], references: [id], onDelete: Cascade)
|
|
productName String
|
|
sku String
|
|
isCustomizable Boolean @default(false)
|
|
quantity Decimal @db.Decimal(14, 3)
|
|
parameters Json
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@unique([cartId, productId])
|
|
@@index([productId])
|
|
}
|
|
|
|
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])
|
|
deliveryAddressId String?
|
|
deliveryAddressRef DeliveryAddress? @relation(fields: [deliveryAddressId], references: [id], onDelete: SetNull)
|
|
deliveryAddress String?
|
|
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)
|
|
unitPrice Decimal? @db.Decimal(14, 2)
|
|
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])
|
|
createdById String
|
|
createdBy User @relation("ReferralCreator", fields: [createdById], references: [id])
|
|
bonusPercent Decimal @db.Decimal(5, 2)
|
|
bonusTransactions BonusTransaction[]
|
|
createdAt DateTime @default(now())
|
|
|
|
@@unique([referrerId, refereeId])
|
|
@@index([referrerId])
|
|
@@index([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?
|
|
referralLinkId String?
|
|
referralLink ReferralLink? @relation(fields: [referralLinkId], references: [id], onDelete: SetNull)
|
|
createdAt DateTime @default(now())
|
|
|
|
@@unique([orderId, referralLinkId])
|
|
}
|
|
|
|
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
|
|
}
|