neue prisma.schema

This commit is contained in:
titver968
2025-11-27 15:29:40 +01:00
parent 0f9fbbf177
commit 77efdda5f3

View File

@@ -1,7 +1,6 @@
generator client { generator client {
provider = "prisma-client-js" provider = "prisma-client-js"
binaryTargets = ["darwin-arm64", "linux-arm64-openssl-3.0.x", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"] 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 { datasource db {
@@ -25,28 +24,25 @@ model EmailConfig {
model Dienststelle { model Dienststelle {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
name String @unique name String @unique
plaetze Int @default(0) // Standard-Plätze, wird nicht mehr direkt verwendet plaetze Int @default(0)
anmeldungenWunsch1 Anmeldung[] @relation("Wunsch1") anmeldungenWunsch1 Anmeldung[] @relation("Wunsch1")
anmeldungenWunsch2 Anmeldung[] @relation("Wunsch2") anmeldungenWunsch2 Anmeldung[] @relation("Wunsch2")
anmeldungenWunsch3 Anmeldung[] @relation("Wunsch3") anmeldungenWunsch3 Anmeldung[] @relation("Wunsch3")
zugewiesene Anmeldung[] @relation("Zugewiesen") zugewiesene Anmeldung[] @relation("Zugewiesen")
// Neue Relation zu ZeitraumPlaetze
zeitraumPlaetze ZeitraumPlaetze[] zeitraumPlaetze ZeitraumPlaetze[]
} }
model Praktikumszeitraum { model Praktikumszeitraum {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
bezeichnung String @unique // z. B. "Frühjahr 2025" bezeichnung String @unique
startDatum DateTime startDatum DateTime
endDatum DateTime endDatum DateTime
anmeldungen Anmeldung[] @relation("PraktikumszeitraumAnmeldungen") anmeldungen Anmeldung[] @relation("PraktikumszeitraumAnmeldungen")
// Neue Relation zu ZeitraumPlaetze
zeitraumPlaetze ZeitraumPlaetze[] zeitraumPlaetze ZeitraumPlaetze[]
} }
// Neue Zwischentabelle für Plätze pro Zeitraum und Dienststelle
model ZeitraumPlaetze { model ZeitraumPlaetze {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
zeitraumId Int zeitraumId Int
@@ -56,19 +52,17 @@ model ZeitraumPlaetze {
zeitraum Praktikumszeitraum @relation(fields: [zeitraumId], references: [id], onDelete: Cascade) zeitraum Praktikumszeitraum @relation(fields: [zeitraumId], references: [id], onDelete: Cascade)
dienststelle Dienststelle @relation(fields: [dienststelleId], references: [id], onDelete: Cascade) dienststelle Dienststelle @relation(fields: [dienststelleId], references: [id], onDelete: Cascade)
// Unique constraint: Pro Zeitraum und Dienststelle nur ein Eintrag
@@unique([zeitraumId, dienststelleId]) @@unique([zeitraumId, dienststelleId])
@@index([zeitraumId]) @@index([zeitraumId])
@@index([dienststelleId]) @@index([dienststelleId])
@@map("zeitraum_plaetze") @@map("zeitraum_plaetze")
} }
// Erweiterte Status-Enum für bessere Nachverfolgung
enum Status { enum Status {
OFFEN // pending - neu eingegangen OFFEN
BEARBEITUNG // processing - wird gerade bearbeitet BEARBEITUNG
ANGENOMMEN // accepted - wurde angenommen ANGENOMMEN
ABGELEHNT // rejected - wurde abgelehnt ABGELEHNT
} }
model Anmeldung { model Anmeldung {
@@ -76,30 +70,27 @@ model Anmeldung {
anrede String anrede String
vorname String vorname String
nachname String nachname String
geburtsdatum String // Neu hinzugefügt geburtsdatum String
strasse String // Neu hinzugefügt strasse String
hausnummer String // Neu hinzugefügt hausnummer String
ort String // Neu hinzugefügt ort String
plz String // Neu hinzugefügt plz String
telefon String // Neu hinzugefügt telefon String
email String email String
schulart String // Neu hinzugefügt schulart String
schulklasse String? // Neu hinzugefügt schulklasse String?
noteDeutsch Int // Geändert von String zu Int noteDeutsch Int
noteMathe Int // Geändert von String zu Int noteMathe Int
sozialverhalten String? sozialverhalten String?
motivation String? // Neu hinzugefügt motivation String?
alter Int? // Neu hinzugefügt für Altersvalidierung alter Int?
status Status @default(OFFEN) status Status @default(OFFEN)
// Neue Felder für Status-Tracking processedAt DateTime?
processedAt DateTime? // Wann wurde sie bearbeitet
// Praktikumszeitraum Relation
praktikumId Int? praktikumId Int?
praktikum Praktikumszeitraum? @relation("PraktikumszeitraumAnmeldungen", fields: [praktikumId], references: [id]) praktikum Praktikumszeitraum? @relation("PraktikumszeitraumAnmeldungen", fields: [praktikumId], references: [id])
// Dienststellen Relationen
zugewiesenId Int? zugewiesenId Int?
zugewiesen Dienststelle? @relation("Zugewiesen", fields: [zugewiesenId], references: [id]) zugewiesen Dienststelle? @relation("Zugewiesen", fields: [zugewiesenId], references: [id])
wunsch1Id Int? wunsch1Id Int?
@@ -112,7 +103,6 @@ model Anmeldung {
timestamp DateTime @default(now()) timestamp DateTime @default(now())
pdfs PdfDatei[] pdfs PdfDatei[]
// Indizes für bessere Performance
@@index([status]) @@index([status])
@@index([processedAt]) @@index([processedAt])
@@index([zugewiesenId]) @@index([zugewiesenId])
@@ -124,4 +114,4 @@ model PdfDatei {
pfad String pfad String
anmeldung Anmeldung @relation(fields: [anmeldungId], references: [id], onDelete: Cascade) anmeldung Anmeldung @relation(fields: [anmeldungId], references: [id], onDelete: Cascade)
anmeldungId Int anmeldungId Int
} }