Files
praktikum/prisma/schema.prisma

105 lines
3.8 KiB
Plaintext

generator client {
provider = "prisma-client-js"
binaryTargets = ["darwin-arm64", "linux-arm64-openssl-3.0.x", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
output = "../node_modules/.prisma/client"
}
datasource db {
provider = "sqlite"
url = "file:./praktika.db"
}
model Admin {
id Int @id @default(1)
password String
}
model EmailConfig {
id Int @id @default(1)
subject String @default("Praktikumsplatz-Zusage")
template String @default("Sehr geehrte/r {anrede} {nachname},\n\nwir freuen uns, Ihnen mitteilen zu können, dass Ihre Bewerbung für ein Praktikum erfolgreich war.\n\nSie wurden für das Praktikum bei folgender Dienststelle angenommen:\n{dienststelle}\n\nWeitere Informationen erhalten Sie in den kommenden Tagen.\n\nMit freundlichen Grüßen\nIhr Praktikumsteam")
@@map("email_config")
}
model Dienststelle {
id Int @id @default(autoincrement())
name String @unique
plaetze Int
anmeldungenWunsch1 Anmeldung[] @relation("Wunsch1")
anmeldungenWunsch2 Anmeldung[] @relation("Wunsch2")
anmeldungenWunsch3 Anmeldung[] @relation("Wunsch3")
zugewiesene Anmeldung[] @relation("Zugewiesen")
}
model Praktikumszeitraum {
id Int @id @default(autoincrement())
bezeichnung String @unique // z. B. "Frühjahr 2025"
startDatum DateTime
endDatum DateTime
anmeldungen Anmeldung[] @relation("PraktikumszeitraumAnmeldungen")
}
// Erweiterte Status-Enum für bessere Nachverfolgung
enum Status {
OFFEN // pending - neu eingegangen
BEARBEITUNG // processing - wird gerade bearbeitet
ANGENOMMEN // accepted - wurde angenommen
ABGELEHNT // rejected - wurde abgelehnt
}
model Anmeldung {
id Int @id @default(autoincrement())
anrede String
vorname String
nachname String
geburtsdatum String // Neu hinzugefügt
strasse String // Neu hinzugefügt
hausnummer String // Neu hinzugefügt
ort String // Neu hinzugefügt
plz String // Neu hinzugefügt
telefon String // Neu hinzugefügt
email String
schulart String // Neu hinzugefügt
schulklasse String? // Neu hinzugefügt
noteDeutsch Int // Geändert von String zu Int
noteMathe Int // Geändert von String zu Int
sozialverhalten String?
motivation String? // Neu hinzugefügt
alter Int? // Neu hinzugefügt für Altersvalidierung
status Status @default(OFFEN)
// Neue Felder für Status-Tracking
processedBy String? // Wer bearbeitet die Anmeldung
processedAt DateTime? // Wann wurde sie bearbeitet
// Praktikumszeitraum Relation
praktikumId Int?
praktikum Praktikumszeitraum? @relation("PraktikumszeitraumAnmeldungen", fields: [praktikumId], references: [id])
// Dienststellen Relationen
zugewiesenId Int?
zugewiesen Dienststelle? @relation("Zugewiesen", fields: [zugewiesenId], references: [id])
wunsch1Id Int?
wunsch1 Dienststelle? @relation("Wunsch1", fields: [wunsch1Id], references: [id])
wunsch2Id Int?
wunsch2 Dienststelle? @relation("Wunsch2", fields: [wunsch2Id], references: [id])
wunsch3Id Int?
wunsch3 Dienststelle? @relation("Wunsch3", fields: [wunsch3Id], references: [id])
timestamp DateTime @default(now())
pdfs PdfDatei[]
// Indizes für bessere Performance
@@index([status])
@@index([processedAt])
@@index([zugewiesenId])
@@map("anmeldungen")
}
model PdfDatei {
id Int @id @default(autoincrement())
pfad String
anmeldung Anmeldung @relation(fields: [anmeldungId], references: [id])
anmeldungId Int
}