mirror of
https://github.com/ershisan99/flashcards-api.git
synced 2025-12-16 12:33:17 +00:00
165 lines
4.8 KiB
Plaintext
165 lines
4.8 KiB
Plaintext
datasource db {
|
|
provider = "mysql"
|
|
url = env("DATABASE_URL")
|
|
relationMode = "prisma"
|
|
}
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
previewFeatures = ["fullTextSearch", "fullTextIndex"]
|
|
}
|
|
|
|
model verification {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
isEmailVerified Boolean @default(false)
|
|
verificationToken String? @unique @default(uuid())
|
|
verificationTokenExpiry DateTime?
|
|
verificationEmailsSent Int @default(0)
|
|
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model user {
|
|
id String @id @default(uuid())
|
|
email String @unique
|
|
password String
|
|
isAdmin Boolean @default(false)
|
|
isEmailVerified Boolean @default(false)
|
|
name String @db.VarChar(40)
|
|
avatar String?
|
|
deckCount Int @default(0)
|
|
isDeleted Boolean? @default(false)
|
|
deleteTime Int?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
cards card[]
|
|
decks deck[]
|
|
grades grade[]
|
|
generalChatMessages GeneralChatMessage[]
|
|
verification verification?
|
|
revokedToken revokedToken[]
|
|
RefreshToken refreshToken[]
|
|
resetPassword resetPassword?
|
|
|
|
@@fulltext([name, email])
|
|
}
|
|
|
|
model revokedToken {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
token String @unique @db.VarChar(500)
|
|
revokedAt DateTime @default(now())
|
|
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model refreshToken {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
token String @unique @db.VarChar(255)
|
|
expiresAt DateTime
|
|
isRevoked Boolean @default(false)
|
|
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model resetPassword {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
resetPasswordToken String? @unique @default(uuid())
|
|
resetPasswordTokenExpiry DateTime?
|
|
resetPasswordEmailsSent Int @default(0)
|
|
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model card {
|
|
id String @id @default(cuid())
|
|
deckId String
|
|
userId String
|
|
question String @db.Text
|
|
answer String @db.Text
|
|
shots Int @default(0)
|
|
questionImg String? @db.VarChar(500)
|
|
answerImg String? @db.VarChar(500)
|
|
answerVideo String? @db.VarChar(500)
|
|
questionVideo String? @db.VarChar(500)
|
|
comments String?
|
|
type String?
|
|
moreId String?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
author user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
decks deck @relation(fields: [deckId], references: [id], onDelete: Cascade)
|
|
grades grade[]
|
|
|
|
@@index([userId])
|
|
@@index([deckId])
|
|
}
|
|
|
|
model deck {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
name String
|
|
isPrivate Boolean @default(false)
|
|
shots Int @default(0)
|
|
cover String? @db.VarChar(500)
|
|
isDeleted Boolean?
|
|
isBlocked Boolean?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
cardsCount Int @default(0)
|
|
author user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
card card[]
|
|
grades grade[]
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model grade {
|
|
id String @id @default(cuid())
|
|
deckId String
|
|
cardId String
|
|
userId String
|
|
grade Int
|
|
shots Int
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
card card @relation(fields: [cardId], references: [id], onDelete: Cascade)
|
|
deck deck @relation(fields: [deckId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([cardId, userId])
|
|
@@index([userId])
|
|
@@index([deckId])
|
|
@@index([cardId])
|
|
}
|
|
|
|
model GeneralChatMessage {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
userName String
|
|
isAdmin Boolean
|
|
avatar String?
|
|
message String
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model fileEntity {
|
|
id Int @id @default(autoincrement())
|
|
fileName String @db.VarChar(500)
|
|
fileUrl String @db.VarChar(500)
|
|
key String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|