Initial commit of the Mado Motor NestJS API.
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum UserRole {
|
||||
User
|
||||
Admin
|
||||
Agent
|
||||
superAdmin
|
||||
}
|
||||
|
||||
enum OrderStatus {
|
||||
pending
|
||||
confirmed
|
||||
preparing
|
||||
shipped
|
||||
delivered
|
||||
cancelled
|
||||
}
|
||||
|
||||
enum RepresentationStatus {
|
||||
pending
|
||||
active
|
||||
rejected
|
||||
}
|
||||
|
||||
enum ReviewStatus {
|
||||
pending
|
||||
approved
|
||||
rejected
|
||||
}
|
||||
|
||||
enum SmsOtpPurpose {
|
||||
register
|
||||
login
|
||||
resetPassword
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
firstName String
|
||||
lastName String
|
||||
cellNumber String @unique
|
||||
passwordHash String
|
||||
city String @default("")
|
||||
role UserRole @default(User)
|
||||
disabled Boolean @default(false)
|
||||
ordersCount Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
refreshTokens RefreshToken[]
|
||||
orders Order[]
|
||||
reviews Review[]
|
||||
callRequests CallRequest[]
|
||||
representations Representation[]
|
||||
|
||||
@@index([role])
|
||||
@@index([disabled])
|
||||
}
|
||||
|
||||
model RefreshToken {
|
||||
id String @id @default(cuid())
|
||||
tokenHash String
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@index([userId])
|
||||
@@index([tokenHash])
|
||||
}
|
||||
|
||||
model SmsOtp {
|
||||
id String @id @default(cuid())
|
||||
cellNumber String
|
||||
purpose SmsOtpPurpose
|
||||
codeHash String
|
||||
payload Json?
|
||||
attempts Int @default(0)
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@index([cellNumber, purpose])
|
||||
@@index([expiresAt])
|
||||
}
|
||||
|
||||
model Product {
|
||||
id String @id @default(cuid())
|
||||
nameFa String
|
||||
nameEn String @default("")
|
||||
price Int @default(0)
|
||||
stock Int @default(0)
|
||||
category String @default("")
|
||||
imageUrl String?
|
||||
imageKey String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
orderItems OrderItem[]
|
||||
|
||||
@@index([category])
|
||||
@@index([price])
|
||||
}
|
||||
|
||||
model Order {
|
||||
id Int @id @default(autoincrement())
|
||||
customerId String?
|
||||
customer User? @relation(fields: [customerId], references: [id], onDelete: SetNull)
|
||||
customerName String
|
||||
customerPhone String
|
||||
status OrderStatus @default(pending)
|
||||
itemCount Int @default(0)
|
||||
note String @default("")
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
items OrderItem[]
|
||||
|
||||
@@index([customerId])
|
||||
@@index([status])
|
||||
@@index([createdAt])
|
||||
}
|
||||
|
||||
model OrderItem {
|
||||
id String @id @default(cuid())
|
||||
orderId Int
|
||||
order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)
|
||||
productId String?
|
||||
product Product? @relation(fields: [productId], references: [id], onDelete: SetNull)
|
||||
nameFa String
|
||||
quantity Int @default(1)
|
||||
unitPrice Int @default(0)
|
||||
|
||||
@@index([orderId])
|
||||
@@index([productId])
|
||||
}
|
||||
|
||||
model BlogPost {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
summary String @default("")
|
||||
body String @default("")
|
||||
author String @default("")
|
||||
imageUrl String?
|
||||
imageKey String?
|
||||
published Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
model Representation {
|
||||
id String @id @default(cuid())
|
||||
userId String?
|
||||
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
||||
name String
|
||||
owner String @default("")
|
||||
firstName String @default("")
|
||||
lastName String @default("")
|
||||
nationalCode String @default("")
|
||||
mobile String
|
||||
province String @default("")
|
||||
city String
|
||||
landline String @default("")
|
||||
address String @default("")
|
||||
postalCode String @default("")
|
||||
description String @default("")
|
||||
status RepresentationStatus @default(pending)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@index([status])
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
model Review {
|
||||
id String @id @default(cuid())
|
||||
authorId String?
|
||||
authorUser User? @relation(fields: [authorId], references: [id], onDelete: SetNull)
|
||||
author String
|
||||
product String
|
||||
rating Int
|
||||
body String @default("")
|
||||
status ReviewStatus @default(pending)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
model CallRequest {
|
||||
id String @id @default(cuid())
|
||||
userId String?
|
||||
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
||||
name String
|
||||
mobile String
|
||||
note String @default("")
|
||||
handled Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@index([handled])
|
||||
@@index([createdAt])
|
||||
}
|
||||
Reference in New Issue
Block a user