diff --git a/prisma/migrations/20250617085825_fix_zugewiesen_relation/migration.sql b/prisma/migrations/20250617085825_fix_zugewiesen_relation/migration.sql new file mode 100644 index 0000000..0327434 --- /dev/null +++ b/prisma/migrations/20250617085825_fix_zugewiesen_relation/migration.sql @@ -0,0 +1,44 @@ +/* + Warnings: + + - Added the required column `zugewiesenId` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. + +*/ +-- RedefineTables +PRAGMA defer_foreign_keys=ON; +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_Anmeldung" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "anrede" TEXT NOT NULL, + "vorname" TEXT NOT NULL, + "nachname" TEXT NOT NULL, + "geburtsdatum" TEXT NOT NULL, + "strasse" TEXT NOT NULL, + "hausnummer" TEXT NOT NULL, + "ort" TEXT NOT NULL, + "plz" TEXT NOT NULL, + "telefon" TEXT NOT NULL, + "email" TEXT NOT NULL, + "noteDeutsch" INTEGER NOT NULL, + "noteMathe" INTEGER NOT NULL, + "sozialverhalten" TEXT NOT NULL, + "schulart" TEXT NOT NULL, + "motivation" TEXT NOT NULL, + "praktikumId" INTEGER NOT NULL, + "wunsch1Id" INTEGER NOT NULL, + "wunsch2Id" INTEGER NOT NULL, + "wunsch3Id" INTEGER NOT NULL, + "status" TEXT NOT NULL DEFAULT 'OFFEN', + "zugewiesenId" INTEGER NOT NULL, + "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT "Anmeldung_wunsch1Id_fkey" FOREIGN KEY ("wunsch1Id") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Anmeldung_wunsch2Id_fkey" FOREIGN KEY ("wunsch2Id") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Anmeldung_wunsch3Id_fkey" FOREIGN KEY ("wunsch3Id") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Anmeldung_zugewiesenId_fkey" FOREIGN KEY ("zugewiesenId") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE +); +INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "noteDeutsch", "noteMathe", "ort", "plz", "praktikumId", "schulart", "sozialverhalten", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "noteDeutsch", "noteMathe", "ort", "plz", "praktikumId", "schulart", "sozialverhalten", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id" FROM "Anmeldung"; +DROP TABLE "Anmeldung"; +ALTER TABLE "new_Anmeldung" RENAME TO "Anmeldung"; +CREATE UNIQUE INDEX "Anmeldung_email_key" ON "Anmeldung"("email"); +PRAGMA foreign_keys=ON; +PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250617091214_make_zugewiesen_optional/migration.sql b/prisma/migrations/20250617091214_make_zugewiesen_optional/migration.sql new file mode 100644 index 0000000..9dcb3d5 --- /dev/null +++ b/prisma/migrations/20250617091214_make_zugewiesen_optional/migration.sql @@ -0,0 +1,38 @@ +-- RedefineTables +PRAGMA defer_foreign_keys=ON; +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_Anmeldung" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "anrede" TEXT NOT NULL, + "vorname" TEXT NOT NULL, + "nachname" TEXT NOT NULL, + "geburtsdatum" TEXT NOT NULL, + "strasse" TEXT NOT NULL, + "hausnummer" TEXT NOT NULL, + "ort" TEXT NOT NULL, + "plz" TEXT NOT NULL, + "telefon" TEXT NOT NULL, + "email" TEXT NOT NULL, + "noteDeutsch" INTEGER NOT NULL, + "noteMathe" INTEGER NOT NULL, + "sozialverhalten" TEXT NOT NULL, + "schulart" TEXT NOT NULL, + "motivation" TEXT NOT NULL, + "praktikumId" INTEGER NOT NULL, + "wunsch1Id" INTEGER NOT NULL, + "wunsch2Id" INTEGER NOT NULL, + "wunsch3Id" INTEGER NOT NULL, + "status" TEXT NOT NULL DEFAULT 'OFFEN', + "zugewiesenId" INTEGER, + "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT "Anmeldung_wunsch1Id_fkey" FOREIGN KEY ("wunsch1Id") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Anmeldung_wunsch2Id_fkey" FOREIGN KEY ("wunsch2Id") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Anmeldung_wunsch3Id_fkey" FOREIGN KEY ("wunsch3Id") REFERENCES "Dienststelle" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "Anmeldung_zugewiesenId_fkey" FOREIGN KEY ("zugewiesenId") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); +INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "noteDeutsch", "noteMathe", "ort", "plz", "praktikumId", "schulart", "sozialverhalten", "status", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zugewiesenId") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "noteDeutsch", "noteMathe", "ort", "plz", "praktikumId", "schulart", "sozialverhalten", "status", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zugewiesenId" FROM "Anmeldung"; +DROP TABLE "Anmeldung"; +ALTER TABLE "new_Anmeldung" RENAME TO "Anmeldung"; +CREATE UNIQUE INDEX "Anmeldung_email_key" ON "Anmeldung"("email"); +PRAGMA foreign_keys=ON; +PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/praktika.db-journal b/prisma/praktika.db-journal new file mode 100644 index 0000000..719ff1b Binary files /dev/null and b/prisma/praktika.db-journal differ diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e76fec4..7b79ae7 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -21,6 +21,7 @@ model Dienststelle { anmeldungenWunsch1 Anmeldung[] @relation("Wunsch1") anmeldungenWunsch2 Anmeldung[] @relation("Wunsch2") anmeldungenWunsch3 Anmeldung[] @relation("Wunsch3") + zugewiesene Anmeldung[] @relation("Zugewiesen") } model Praktikumszeitraum { @@ -30,6 +31,12 @@ model Praktikumszeitraum { endDatum DateTime } +enum Status { + OFFEN + ANGENOMMEN + ABGELEHNT +} + model Anmeldung { id Int @id @default(autoincrement()) anrede String @@ -50,13 +57,15 @@ model Anmeldung { praktikumId Int - wunsch1Id Int - wunsch2Id Int - wunsch3Id Int - - wunsch1 Dienststelle @relation("Wunsch1", fields: [wunsch1Id], references: [id]) - wunsch2 Dienststelle @relation("Wunsch2", fields: [wunsch2Id], references: [id]) - wunsch3 Dienststelle @relation("Wunsch3", fields: [wunsch3Id], references: [id]) + wunsch1 Dienststelle @relation("Wunsch1", fields: [wunsch1Id], references: [id]) + wunsch1Id Int + wunsch2 Dienststelle @relation("Wunsch2", fields: [wunsch2Id], references: [id]) + wunsch2Id Int + wunsch3 Dienststelle @relation("Wunsch3", fields: [wunsch3Id], references: [id]) + wunsch3Id Int + status Status @default(OFFEN) + zugewiesenId Int? + zugewiesen Dienststelle? @relation("Zugewiesen", fields: [zugewiesenId], references: [id]) timestamp DateTime @default(now()) diff --git a/src/routes/api/admin/anmeldungen/+server.ts b/src/routes/api/admin/anmeldungen/+server.ts index c024781..39ce10f 100644 --- a/src/routes/api/admin/anmeldungen/+server.ts +++ b/src/routes/api/admin/anmeldungen/+server.ts @@ -6,7 +6,9 @@ import path from 'path'; const prisma = new PrismaClient(); -function checkAuth(cookies: any) { +import type { Cookies } from '@sveltejs/kit'; + +function checkAuth(cookies: Cookies) { return cookies.get('admin_session') === 'true'; } @@ -44,7 +46,10 @@ export const DELETE: RequestHandler = async ({ cookies, url }) => { try { await fs.unlink(filePath); } catch (err) { - console.warn(`Datei konnte nicht gelöscht werden: ${filePath}`, err.message); + console.warn( + `Datei konnte nicht gelöscht werden: ${filePath}`, + err instanceof Error ? err.message : String(err) + ); // Fehler ignorieren, Datei evtl. manuell entfernt } } @@ -61,4 +66,5 @@ export const DELETE: RequestHandler = async ({ cookies, url }) => { console.error('Fehler beim Löschen der Anmeldung:', error); return json({ error: 'Löschen fehlgeschlagen' }, { status: 500 }); } -}; \ No newline at end of file +}; + diff --git a/src/routes/api/anmelden/+server.ts b/src/routes/api/anmelden/+server.ts index d39dc57..c020b8a 100644 --- a/src/routes/api/anmelden/+server.ts +++ b/src/routes/api/anmelden/+server.ts @@ -54,7 +54,8 @@ export async function POST({ request }) { wunsch3Id: parseInt(get('wunsch3Id')), pdfs: { create: gespeichertePfade.map((pfad) => ({ pfad })) - } + }, + zugewiesenId: null } });