Files
FL-Akademie/prisma/schema.prisma

136 lines
3.5 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum Role {
LEARNER
INSTRUCTOR
ADMIN
}
enum BillingInterval {
NONE
MONTH
QUARTER
YEAR
}
model User {
id String @id @default(cuid())
email String @unique
passwordHash String
name String
role Role @default(LEARNER)
createdAt DateTime @default(now())
enrollments Enrollment[]
progress LessonProgress[]
certificates Certificate[]
}
model Category {
id String @id @default(cuid())
slug String @unique
name String
courses CourseCategory[]
}
model Course {
id String @id @default(cuid())
slug String @unique
title String
description String @default("")
thumbnailUrl String?
published Boolean @default(false)
priceCents Int @default(0)
currency String @default("EUR")
billingInterval BillingInterval @default(NONE)
ratingAverage Float @default(0)
ratingCount Int @default(0)
authorId String
authorName String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
modules CourseModule[]
enrollments Enrollment[]
categories CourseCategory[]
certificates Certificate[]
}
model LandingPage {
id String @id
content Json
updatedAt DateTime @updatedAt
}
model Certificate {
id String @id @default(cuid())
code String @unique
userId String
courseId String
issuedAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
course Course @relation(fields: [courseId], references: [id], onDelete: Cascade)
@@unique([userId, courseId])
}
model CourseCategory {
courseId String
categoryId String
course Course @relation(fields: [courseId], references: [id], onDelete: Cascade)
category Category @relation(fields: [categoryId], references: [id], onDelete: Cascade)
@@id([courseId, categoryId])
}
model CourseModule {
id String @id @default(cuid())
courseId String
course Course @relation(fields: [courseId], references: [id], onDelete: Cascade)
title String
sortOrder Int @default(0)
lessons Lesson[]
}
model Lesson {
id String @id @default(cuid())
moduleId String
module CourseModule @relation(fields: [moduleId], references: [id], onDelete: Cascade)
slug String
title String
contentHtml String @default("")
videoUrl String?
sortOrder Int @default(0)
published Boolean @default(true)
progress LessonProgress[]
@@unique([moduleId, slug])
}
model Enrollment {
id String @id @default(cuid())
userId String
courseId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
course Course @relation(fields: [courseId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
@@unique([userId, courseId])
}
model LessonProgress {
id String @id @default(cuid())
userId String
lessonId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
lesson Lesson @relation(fields: [lessonId], references: [id], onDelete: Cascade)
completedAt DateTime?
@@unique([userId, lessonId])
}