Scaffold Apollo backend domain API
This commit is contained in:
233
prisma/schema.prisma
Normal file
233
prisma/schema.prisma
Normal file
@@ -0,0 +1,233 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user