taskmanager/prisma/schema.prisma
2025-11-12 17:16:01 +01:00

114 lines
2.5 KiB
Plaintext

// Prisma Schema für Aufgabenplaner
// Dokumentation: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
// Benutzerrollen im System
enum Role {
BEARBEITER
PFLEGER
VORGESETZTER
ADMIN
}
// Aufgaben-Status
enum TaskStatus {
UNERLEDIGT
IN_BEARBEITUNG
ERLEDIGT
}
// Benutzer-Modell
model User {
id String @id @default(cuid())
email String @unique
name String
password String
role Role @default(BEARBEITER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations: Aufgaben die der Benutzer erstellt hat
createdTasks Task[] @relation("TaskCreator")
// Relations: Aufgaben die dem Benutzer zugewiesen sind
assignedTasks Task[] @relation("TaskAssignee")
// Relations: Kommentare des Benutzers
comments Comment[]
@@index([email])
}
// Aufgaben-Modell
model Task {
id String @id @default(cuid())
wo String
was String @db.Text
bisWann DateTime
status TaskStatus @default(UNERLEDIGT)
beauftragtAm DateTime?
firmaBeauftragt String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations: Ersteller der Aufgabe
creatorId String
creator User @relation("TaskCreator", fields: [creatorId], references: [id])
// Relations: Zugewiesener Bearbeiter
assigneeId String?
assignee User? @relation("TaskAssignee", fields: [assigneeId], references: [id])
// Relations: Kommentare zur Aufgabe
comments Comment[]
// Relations: Dateien der Aufgabe
files File[]
@@index([status])
@@index([bisWann])
@@index([assigneeId])
@@index([creatorId])
}
// Kommentar-Modell
model Comment {
id String @id @default(cuid())
content String @db.Text
createdAt DateTime @default(now())
// Relations: Zugehörige Aufgabe
taskId String
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
// Relations: Autor des Kommentars
authorId String
author User @relation(fields: [authorId], references: [id])
@@index([taskId])
}
// Datei-Modell
model File {
id String @id @default(cuid())
name String
path String
mimeType String
size Int
createdAt DateTime @default(now())
// Relations: Zugehörige Aufgabe
taskId String
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
@@index([taskId])
}