105 lines
3.8 KiB
Plaintext
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
|
|
} |