From 89bf0298cec0f20a2c815c13d783efded639f872 Mon Sep 17 00:00:00 2001 From: titver968 Date: Wed, 26 Nov 2025 15:27:21 +0100 Subject: [PATCH] praktikum refinemend Plaetze pro Dienstelle und Pro Zeitraum --- package-lock.json | 1363 ++++++++++++++++- package.json | 8 +- .../20250415121207_init/migration.sql | 21 - .../migration.sql | 8 - .../migration.sql | 52 - .../20250417130201_add_admin/migration.sql | 5 - .../migration.sql | 2 - .../migration.sql | 39 - .../migration.sql | 46 - .../20250509063847_plaetze/migration.sql | 20 - .../migration.sql | 45 - .../migration.sql | 46 - .../migration.sql | 35 - .../migration.sql | 44 - .../migration.sql | 38 - .../20250726071314_init/migration.sql | 50 - .../migration.sql | 16 - .../migration.sql | 62 - .../20250726135031_on_delete/migration.sql | 14 - .../migration.sql | 50 - .../migration.sql | 14 - .../20251125082147_prisma6/migration.sql | 114 ++ prisma/prisma/praktika.db | Bin 0 -> 94208 bytes prisma/schema.prisma | 28 +- src/lib/components/AdminNavigation.svelte | 9 +- src/lib/components/AnmeldungenTable.svelte | 339 ++-- src/lib/prisma.ts | 15 + src/routes/+page.svelte | 268 ++-- src/routes/admin/dienststellen/+page.svelte | 58 +- src/routes/admin/plaetze/+page.server.ts | 15 + src/routes/admin/plaetze/+page.svelte | 259 ++++ src/routes/api/admin/anmeldungen/+server.ts | 78 +- src/routes/api/admin/dienststellen/+server.ts | 249 ++- src/routes/api/admin/login/+server.ts | 50 +- src/routes/api/admin/plaetze/+server.ts | 92 ++ src/routes/api/admin/zeitraeume/+server.ts | 197 ++- .../api/admin/zeitraum-plaetze/+page.svelte | 295 ++++ .../api/admin/zeitraum-plaetze/+server.ts | 114 ++ src/routes/api/dienststellen/+server.ts | 11 +- vite.config.ts | 10 +- 40 files changed, 2932 insertions(+), 1247 deletions(-) delete mode 100644 prisma/migrations/20250415121207_init/migration.sql delete mode 100644 prisma/migrations/20250415121828_add_unique_email/migration.sql delete mode 100644 prisma/migrations/20250415125317_dienststellen/migration.sql delete mode 100644 prisma/migrations/20250417130201_add_admin/migration.sql delete mode 100644 prisma/migrations/20250424064742_add_pdf_upload/migration.sql delete mode 100644 prisma/migrations/20250424084609_add_pdf_upload/migration.sql delete mode 100644 prisma/migrations/20250424085826_add_pdfdatei_relation/migration.sql delete mode 100644 prisma/migrations/20250509063847_plaetze/migration.sql delete mode 100644 prisma/migrations/20250520124044_add_praktikumszeitraum/migration.sql delete mode 100644 prisma/migrations/20250604135706_noten_und_sozialverhalten/migration.sql delete mode 100644 prisma/migrations/20250604142543_praktikum_id_only/migration.sql delete mode 100644 prisma/migrations/20250617085825_fix_zugewiesen_relation/migration.sql delete mode 100644 prisma/migrations/20250617091214_make_zugewiesen_optional/migration.sql delete mode 100644 prisma/migrations/20250726071314_init/migration.sql delete mode 100644 prisma/migrations/20250726074332_add_email_config/migration.sql delete mode 100644 prisma/migrations/20250726100050_add_status_tracking/migration.sql delete mode 100644 prisma/migrations/20250726135031_on_delete/migration.sql delete mode 100644 prisma/migrations/20250726135957_remove_processed_by/migration.sql delete mode 100644 prisma/migrations/20250726142352_plaetzze_not_negativ/migration.sql create mode 100644 prisma/migrations/20251125082147_prisma6/migration.sql create mode 100644 prisma/prisma/praktika.db create mode 100644 src/lib/prisma.ts create mode 100644 src/routes/admin/plaetze/+page.server.ts create mode 100644 src/routes/admin/plaetze/+page.svelte create mode 100644 src/routes/api/admin/plaetze/+server.ts create mode 100644 src/routes/api/admin/zeitraum-plaetze/+page.svelte create mode 100644 src/routes/api/admin/zeitraum-plaetze/+server.ts diff --git a/package-lock.json b/package-lock.json index e3bc988..1dc7d73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,9 @@ "name": "praktikum", "version": "0.0.1", "dependencies": { - "@prisma/client": "^6.12.0", + "@prisma/adapter-better-sqlite3": "^7.0.0", + "@prisma/client": "^6.19.0", + "@prisma/migrate": "^7.0.0", "@sveltejs/adapter-node": "^5.2.13", "bcryptjs": "^3.0.2" }, @@ -28,7 +30,7 @@ "postcss": "^8.5.6", "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", - "prisma": "^6.12.0", + "prisma": "^6.19.0", "svelte": "^5.36.17", "svelte-check": "^4.3.0", "tailwindcss": "^3.4.17", @@ -65,6 +67,27 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/ni": { + "version": "0.21.12", + "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-0.21.12.tgz", + "integrity": "sha512-2aDL3WUv8hMJb2L3r/PIQWsTLyq7RQr3v9xD16fiz6O8ys1xEyLhhTOv8gxtZvJiTzjTF5pHoArvRdesGL1DMQ==", + "license": "MIT", + "bin": { + "na": "bin/na.mjs", + "nci": "bin/nci.mjs", + "ni": "bin/ni.mjs", + "nlx": "bin/nlx.mjs", + "nr": "bin/nr.mjs", + "nu": "bin/nu.mjs", + "nun": "bin/nun.mjs" + } + }, + "node_modules/@bugsnag/cuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.2.1.tgz", + "integrity": "sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==", + "license": "MIT" + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -806,11 +829,22 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -824,7 +858,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -834,7 +867,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -844,6 +876,24 @@ "node": ">= 8" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -861,10 +911,20 @@ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "license": "MIT" }, + "node_modules/@prisma/adapter-better-sqlite3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-7.0.0.tgz", + "integrity": "sha512-a0ltJcisHuudnzgD822TwTrvxpQ84ZXUk/3WJLOIGrAM/tysLMb7Q4n0uZeCofvh+UMRoGcT2B6TS3T9/TLMUA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/driver-adapter-utils": "7.0.0", + "better-sqlite3": "^11.10.0" + } + }, "node_modules/@prisma/client": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.12.0.tgz", - "integrity": "sha512-wn98bJ3Cj6edlF4jjpgXwbnQIo/fQLqqQHPk2POrZPxTlhY3+n90SSIF3LMRVa8VzRFC/Gec3YKJRxRu+AIGVA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.0.tgz", + "integrity": "sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -883,64 +943,351 @@ } } }, - "node_modules/@prisma/config": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.12.0.tgz", - "integrity": "sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg==", - "devOptional": true, + "node_modules/@prisma/client-common": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client-common/-/client-common-7.0.0.tgz", + "integrity": "sha512-dZTkSh+aDcBJY//6iIw0VqoBp4oi5NFVhrionUbLG12C5uPP3kipGlPYRAewlYK9h/dDHDMXPcMzh4n3OZiy4A==", "license": "Apache-2.0", "dependencies": { - "jiti": "2.4.2" + "@prisma/client-engine-runtime": "7.0.0", + "@prisma/dmmf": "7.0.0", + "@prisma/driver-adapter-utils": "7.0.0", + "@prisma/generator": "7.0.0", + "@prisma/internals": "7.0.0" + } + }, + "node_modules/@prisma/client-engine-runtime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client-engine-runtime/-/client-engine-runtime-7.0.0.tgz", + "integrity": "sha512-RFB51k/2vHrgvyQ5MLm8WcQTyvsx/4rjGe2AHeYeJimnTjBDrcGPB4yz3z4j0cBcgW5NB3CF0xMj6jAbA5z7Ig==", + "license": "Apache-2.0", + "dependencies": { + "@bugsnag/cuid": "3.2.1", + "@opentelemetry/api": "1.9.0", + "@paralleldrive/cuid2": "2.2.2", + "@prisma/client-runtime-utils": "7.0.0", + "@prisma/debug": "7.0.0", + "@prisma/driver-adapter-utils": "7.0.0", + "nanoid": "5.1.5", + "ulid": "3.0.0", + "uuid": "11.1.0" + } + }, + "node_modules/@prisma/client-engine-runtime/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@prisma/client-generator-js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client-generator-js/-/client-generator-js-7.0.0.tgz", + "integrity": "sha512-/IPjWAhdix14wccoxP6lvJ4X+r3N8PFIqkKOBJW7r7LRmisMWZBjIgkA058Yl2QZ4DiXJyfek4Z+rehv9fmFvQ==", + "license": "Apache-2.0", + "dependencies": { + "@antfu/ni": "0.21.12", + "@prisma/client-common": "7.0.0", + "@prisma/debug": "7.0.0", + "@prisma/dmmf": "7.0.0", + "@prisma/engines-version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/fetch-engine": "7.0.0", + "@prisma/generator": "7.0.0", + "@prisma/get-platform": "7.0.0", + "@prisma/internals": "7.0.0", + "@prisma/ts-builders": "7.0.0", + "env-paths": "2.2.1", + "indent-string": "4.0.0", + "klona": "2.0.6", + "package-up": "5.0.0", + "pluralize": "8.0.0", + "ts-pattern": "5.6.2" + } + }, + "node_modules/@prisma/client-generator-js/node_modules/@prisma/get-platform": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.0.tgz", + "integrity": "sha512-zyhzrAa+y/GfyCzTnuk0D9lfkvDzo7IbsNyuhTqhPu/AN0txm0x26HAR4tJLismla/fHf5fBzYwSivYSzkpakg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0" + } + }, + "node_modules/@prisma/client-generator-registry": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client-generator-registry/-/client-generator-registry-7.0.0.tgz", + "integrity": "sha512-Ro089rBJmdhOrBgRtxfzTwsY5575LXwEufSbH7D/3tZLYVCv4NTt48qqZGl4e3hXmzEVPbigH69SCl7zrzPLpA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/client-generator-js": "7.0.0", + "@prisma/client-generator-ts": "7.0.0", + "@prisma/generator": "7.0.0", + "@prisma/internals": "7.0.0" + } + }, + "node_modules/@prisma/client-generator-ts": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client-generator-ts/-/client-generator-ts-7.0.0.tgz", + "integrity": "sha512-bJjIrjfZEQO34dfml/sMs0I9rvwJmSrW+X+KlUT62rFH0HRJKRdGjQWAvPsq8zsCoUP1HLNONLlWZEyuWv/5EQ==", + "license": "Apache-2.0", + "dependencies": { + "@antfu/ni": "0.21.12", + "@prisma/client-common": "7.0.0", + "@prisma/debug": "7.0.0", + "@prisma/dmmf": "7.0.0", + "@prisma/engines-version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/fetch-engine": "7.0.0", + "@prisma/generator": "7.0.0", + "@prisma/get-platform": "7.0.0", + "@prisma/internals": "7.0.0", + "@prisma/ts-builders": "7.0.0", + "fast-glob": "3.3.3", + "get-tsconfig": "4.10.0", + "indent-string": "4.0.0", + "klona": "2.0.6", + "package-up": "5.0.0", + "pluralize": "8.0.0", + "ts-pattern": "5.6.2" + } + }, + "node_modules/@prisma/client-generator-ts/node_modules/@prisma/get-platform": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.0.tgz", + "integrity": "sha512-zyhzrAa+y/GfyCzTnuk0D9lfkvDzo7IbsNyuhTqhPu/AN0txm0x26HAR4tJLismla/fHf5fBzYwSivYSzkpakg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0" + } + }, + "node_modules/@prisma/client-runtime-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.0.0.tgz", + "integrity": "sha512-PAiFgMBPrLSaakBwUpML5NevipuKSL3rtNr8pZ8CZ3OBXo0BFcdeGcBIKw/CxJP6H4GNa4+l5bzJPrk8Iq6tDw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/config": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.0.0.tgz", + "integrity": "sha512-TDASB57hyGUwHB0IPCSkoJcXFrJOKA1+R/1o4np4PbS+E0F5MiY5aAyUttO0mSuNQaX7t8VH/GkDemffF1mQzg==", + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz", - "integrity": "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==", - "devOptional": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.0.0.tgz", + "integrity": "sha512-SdS3qzfMASHtWimywtkiRcJtrHzacbmMVhElko3DYUZSB0TTLqRYWpddRBJdeGgSLmy1FD55p7uGzIJ+MtfhMg==", "license": "Apache-2.0" }, + "node_modules/@prisma/dmmf": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/dmmf/-/dmmf-7.0.0.tgz", + "integrity": "sha512-Te1mE1K5M/qO4iYMC3LYrrAbAGlxcah+Bx1YFRLlewu6Ah5tgp9ZhDQ3W/nRAWBeWyNrnhnkTWBNkcXJYtRy+g==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/driver-adapter-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.0.0.tgz", + "integrity": "sha512-ZEvzFaIapnfNKFPgZu/Zy4g6jfO5C0ZmMp+IjO9hNKNDwVKrDlBKw7F3Y9oRK0U0kfb9lKWP4Dz7DgtKs4TTbA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0" + } + }, "node_modules/@prisma/engines": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.12.0.tgz", - "integrity": "sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA==", - "devOptional": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.0.0.tgz", + "integrity": "sha512-ojCL3OFLMCz33UbU9XwH32jwaeM+dWb8cysTuY8eK6ZlMKXJdy6ogrdG3MGB3meKLGdQBmOpUUGJ7eLIaxbrcg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/fetch-engine": "6.12.0", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "7.0.0", + "@prisma/engines-version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/fetch-engine": "7.0.0", + "@prisma/get-platform": "7.0.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc.tgz", - "integrity": "sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ==", - "devOptional": true, + "version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513.tgz", + "integrity": "sha512-7bzyN8Gp9GbDFbTDzVUH9nFcgRWvsWmjrGgBJvIC/zEoAuv/lx62gZXgAKfjn/HoPkxz/dS+TtsnduFx8WA+cw==", "license": "Apache-2.0" }, - "node_modules/@prisma/fetch-engine": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.12.0.tgz", - "integrity": "sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag==", - "devOptional": true, + "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.0.tgz", + "integrity": "sha512-zyhzrAa+y/GfyCzTnuk0D9lfkvDzo7IbsNyuhTqhPu/AN0txm0x26HAR4tJLismla/fHf5fBzYwSivYSzkpakg==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "7.0.0" + } + }, + "node_modules/@prisma/fetch-engine": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.0.0.tgz", + "integrity": "sha512-qcyWTeWDjVDaDQSrVIymZU1xCYlvmwCzjA395lIuFjUESOH3YQCb8i/hpd4vopfq3fUR4v6+MjjtIGvnmErQgw==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0", + "@prisma/engines-version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/get-platform": "7.0.0" + } + }, + "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.0.tgz", + "integrity": "sha512-zyhzrAa+y/GfyCzTnuk0D9lfkvDzo7IbsNyuhTqhPu/AN0txm0x26HAR4tJLismla/fHf5fBzYwSivYSzkpakg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0" + } + }, + "node_modules/@prisma/generator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/generator/-/generator-7.0.0.tgz", + "integrity": "sha512-nOcN8uFVVkw9QroZX2cZY7w+epb/5VsTbBpz7m9Lp1zhW/usxH7p8ZfP3LhFUSSelb7mslvBRNRRumQp5IAmiw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/generator-helper": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/generator-helper/-/generator-helper-7.0.0.tgz", + "integrity": "sha512-zVdOzhEBXBcJxUubW3SQ2y9Y+uHCSv44ZiX9yXVVVn9cev13sNOPbP24yglCUx2ehHlLjZ324KLDvqxVAcx4hQ==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0", + "@prisma/dmmf": "7.0.0", + "@prisma/generator": "7.0.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.12.0.tgz", - "integrity": "sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.0.tgz", + "integrity": "sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0" + "@prisma/debug": "6.19.0" + } + }, + "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.0.tgz", + "integrity": "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/internals": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/internals/-/internals-7.0.0.tgz", + "integrity": "sha512-ka2G6XQHPCrQDWG/LsxbSLJ0o233Y1q1KXJOzzYVBsfKasigg1DpN+/ofGJVEPZREXpCkOeYE89mirxdBHT2AA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "7.0.0", + "@prisma/debug": "7.0.0", + "@prisma/dmmf": "7.0.0", + "@prisma/driver-adapter-utils": "7.0.0", + "@prisma/engines": "7.0.0", + "@prisma/fetch-engine": "7.0.0", + "@prisma/generator": "7.0.0", + "@prisma/generator-helper": "7.0.0", + "@prisma/get-platform": "7.0.0", + "@prisma/prisma-schema-wasm": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/schema-engine-wasm": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/schema-files-loader": "7.0.0", + "arg": "5.0.2", + "prompts": "2.4.2" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/internals/node_modules/@prisma/get-platform": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.0.tgz", + "integrity": "sha512-zyhzrAa+y/GfyCzTnuk0D9lfkvDzo7IbsNyuhTqhPu/AN0txm0x26HAR4tJLismla/fHf5fBzYwSivYSzkpakg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0" + } + }, + "node_modules/@prisma/migrate": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/migrate/-/migrate-7.0.0.tgz", + "integrity": "sha512-iRHyipoD7EUXNidRnTFLzRJmHP7DEUD9XQjHshfbF+3sG4KskAv6tyqvYxF1wDPme+CPs6bRzIhZa016hSWD5w==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/client-generator-registry": "7.0.0", + "@prisma/config": "7.0.0", + "@prisma/debug": "7.0.0", + "@prisma/driver-adapter-utils": "7.0.0", + "@prisma/engines-version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "@prisma/generator": "7.0.0", + "@prisma/get-platform": "7.0.0", + "@prisma/internals": "7.0.0", + "prompts": "2.4.2" + }, + "peerDependencies": { + "@prisma/internals": "*" + } + }, + "node_modules/@prisma/migrate/node_modules/@prisma/get-platform": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.0.tgz", + "integrity": "sha512-zyhzrAa+y/GfyCzTnuk0D9lfkvDzo7IbsNyuhTqhPu/AN0txm0x26HAR4tJLismla/fHf5fBzYwSivYSzkpakg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.0" + } + }, + "node_modules/@prisma/prisma-schema-wasm": { + "version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "resolved": "https://registry.npmjs.org/@prisma/prisma-schema-wasm/-/prisma-schema-wasm-6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513.tgz", + "integrity": "sha512-+eoPe1nCLjRLfdvNBOUIraozozRe6IgfYNS3u/j+GcQZgg82kTYwiMzYcgJb0D6giqddv60W8c3F5OxeFV6Kiw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/schema-engine-wasm": { + "version": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "resolved": "https://registry.npmjs.org/@prisma/schema-engine-wasm/-/schema-engine-wasm-6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513.tgz", + "integrity": "sha512-2BhRjCnWXPHsYMxslnKrqN+3EarnECsqlx+j3K5eWcnArlW0ZpOC+ay9ahyuIm7umU+eOceTnDrpv8WPVdo0oQ==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/schema-files-loader": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/schema-files-loader/-/schema-files-loader-7.0.0.tgz", + "integrity": "sha512-S/WKnkQ4m/h3Otl6yV/yW14UT1Ymseth01HVcuWfwQF4skqsJ+xd2WMPWouJcvjjgh+f1iEdKJoKjn3LXPE0hg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/prisma-schema-wasm": "6.20.0-16.next-0c19ccc313cf9911a90d99d2ac2eb0280c76c513", + "fs-extra": "11.3.0" + } + }, + "node_modules/@prisma/ts-builders": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@prisma/ts-builders/-/ts-builders-7.0.0.tgz", + "integrity": "sha512-G39w/nTYGxIEmuUhx8Z1otUV6XiwnYUBcgA/I13gtvJoQU6wt9Aqbq2LeAw3XuQUw3O3hSXdLHOormnWptjRSQ==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/internals": "7.0.0" } }, "node_modules/@rollup/plugin-commonjs": { @@ -1304,6 +1651,12 @@ "win32" ] }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, "node_modules/@sveltejs/acorn-typescript": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", @@ -2137,7 +2490,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -2210,6 +2562,26 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/bcryptjs": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz", @@ -2219,6 +2591,17 @@ "bcrypt": "bin/bcrypt" } }, + "node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -2232,6 +2615,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -2247,7 +2650,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2289,6 +2691,58 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2310,9 +2764,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001714", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz", - "integrity": "sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==", + "version": "1.0.30001757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", + "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", "dev": true, "funding": [ { @@ -2351,7 +2805,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -2373,6 +2826,15 @@ "node": ">=18" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -2425,6 +2887,21 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -2486,6 +2963,30 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2502,11 +3003,31 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -2542,6 +3063,18 @@ "dev": true, "license": "MIT" }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2549,6 +3082,16 @@ "dev": true, "license": "MIT" }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.137", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz", @@ -2563,6 +3106,24 @@ "dev": true, "license": "MIT" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.18.2", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", @@ -2577,6 +3138,15 @@ "node": ">=10.13.0" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/esbuild": { "version": "0.25.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", @@ -2866,6 +3436,43 @@ "node": ">=0.10.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2877,7 +3484,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -2894,7 +3500,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -2921,7 +3526,6 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -2954,11 +3558,16 @@ "node": ">=16.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -2984,6 +3593,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -3036,6 +3657,26 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3059,6 +3700,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -3136,7 +3812,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -3168,6 +3843,26 @@ "node": ">= 0.4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3205,6 +3900,27 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3237,7 +3953,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3257,7 +3972,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -3276,7 +3990,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -3318,7 +4031,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "devOptional": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -3358,6 +4070,18 @@ "dev": true, "license": "MIT" }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -3377,6 +4101,15 @@ "node": ">=6" } }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/known-css-properties": { "version": "0.37.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", @@ -3700,7 +4433,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -3710,7 +4442,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -3724,7 +4455,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -3733,6 +4463,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3746,6 +4488,15 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -3785,6 +4536,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -3839,6 +4596,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3846,6 +4609,24 @@ "dev": true, "license": "MIT" }, + "node_modules/node-abi": { + "version": "3.85.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", + "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", @@ -3873,6 +4654,25 @@ "node": ">=0.10.0" } }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3893,6 +4693,21 @@ "node": ">= 6" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -3950,6 +4765,21 @@ "dev": true, "license": "BlueOak-1.0.0" }, + "node_modules/package-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/package-up/-/package-up-5.0.0.tgz", + "integrity": "sha512-MQEgDUvXCa3sGvqHg3pzHO8e9gqTCMPVrWUko3vPQGntwegmFo52mZb2abIVTjFnUcW0BcPz0D93jV5Cas1DWA==", + "license": "MIT", + "dependencies": { + "find-up-simple": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4006,6 +4836,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -4044,6 +4886,26 @@ "node": ">= 6" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -4265,6 +5127,32 @@ "dev": true, "license": "MIT" }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4303,15 +5191,15 @@ } }, "node_modules/prisma": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.12.0.tgz", - "integrity": "sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.0.tgz", + "integrity": "sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.12.0", - "@prisma/engines": "6.12.0" + "@prisma/config": "6.19.0", + "@prisma/engines": "6.19.0" }, "bin": { "prisma": "build/index.js" @@ -4328,6 +5216,91 @@ } } }, + "node_modules/prisma/node_modules/@prisma/config": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.0.tgz", + "integrity": "sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" + } + }, + "node_modules/prisma/node_modules/@prisma/debug": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.0.tgz", + "integrity": "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/prisma/node_modules/@prisma/engines": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.0.tgz", + "integrity": "sha512-pMRJ+1S6NVdXoB8QJAPIGpKZevFjxhKt0paCkRDTZiczKb7F4yTgRP8M4JdVkpQwmaD4EoJf6qA+p61godDokw==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.0", + "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", + "@prisma/fetch-engine": "6.19.0", + "@prisma/get-platform": "6.19.0" + } + }, + "node_modules/prisma/node_modules/@prisma/engines-version": { + "version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773.tgz", + "integrity": "sha512-gV7uOBQfAFlWDvPJdQxMT1aSRur3a0EkU/6cfbAC5isV67tKDWUrPauyaHNpB+wN1ebM4A9jn/f4gH+3iHSYSQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/prisma/node_modules/@prisma/fetch-engine": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.0.tgz", + "integrity": "sha512-OOx2Lda0DGrZ1rodADT06ZGqHzr7HY7LNMaFE2Vp8dp146uJld58sRuasdX0OiwpHgl8SqDTUKHNUyzEq7pDdQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.0", + "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", + "@prisma/get-platform": "6.19.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4338,11 +5311,26 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -4359,6 +5347,40 @@ ], "license": "MIT" }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4369,11 +5391,24 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -4413,11 +5448,19 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -4467,7 +5510,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -4499,11 +5541,30 @@ "node": ">=6" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4554,6 +5615,51 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/sirv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", @@ -4568,6 +5674,12 @@ "node": ">=18" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4577,6 +5689,15 @@ "node": ">=0.10.0" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -5023,6 +6144,40 @@ "node": ">=18" } }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -5046,6 +6201,15 @@ "node": ">=0.8" } }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -5066,7 +6230,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -5155,6 +6318,24 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-pattern": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-5.6.2.tgz", + "integrity": "sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw==", + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5206,6 +6387,15 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/ulid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.0.tgz", + "integrity": "sha512-yvZYdXInnJve6LdlPIuYmURdS2NP41ZoF4QW7SXwbUKYt53+0eDAySO+rGSvM2O/ciuB/G+8N7GQrZ1mCJpuqw==", + "license": "MIT", + "bin": { + "ulid": "dist/cli.js" + } + }, "node_modules/undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", @@ -5213,6 +6403,15 @@ "devOptional": true, "license": "MIT" }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -5258,9 +6457,21 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -5489,6 +6700,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", diff --git a/package.json b/package.json index 5a0f78b..4428275 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "version": "0.0.1", "overrides": { - "cookie": "^0.7.0" + "cookie": "^0.7.0" }, "type": "module", "prisma": { @@ -35,7 +35,7 @@ "postcss": "^8.5.6", "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", - "prisma": "^6.12.0", + "prisma": "^6.19.0", "svelte": "^5.36.17", "svelte-check": "^4.3.0", "tailwindcss": "^3.4.17", @@ -46,7 +46,9 @@ "vite-plugin": "^0.0.0" }, "dependencies": { - "@prisma/client": "^6.12.0", + "@prisma/adapter-better-sqlite3": "^7.0.0", + "@prisma/client": "^6.19.0", + "@prisma/migrate": "^7.0.0", "@sveltejs/adapter-node": "^5.2.13", "bcryptjs": "^3.0.2" } diff --git a/prisma/migrations/20250415121207_init/migration.sql b/prisma/migrations/20250415121207_init/migration.sql deleted file mode 100644 index 3a184b0..0000000 --- a/prisma/migrations/20250415121207_init/migration.sql +++ /dev/null @@ -1,21 +0,0 @@ --- CreateTable -CREATE TABLE "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, - "schulart" TEXT NOT NULL, - "zeitraum" TEXT NOT NULL, - "motivation" TEXT NOT NULL, - "wunsch1" TEXT NOT NULL, - "wunsch2" TEXT NOT NULL, - "wunsch3" TEXT NOT NULL, - "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP -); diff --git a/prisma/migrations/20250415121828_add_unique_email/migration.sql b/prisma/migrations/20250415121828_add_unique_email/migration.sql deleted file mode 100644 index 9215dc1..0000000 --- a/prisma/migrations/20250415121828_add_unique_email/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - A unique constraint covering the columns `[email]` on the table `Anmeldung` will be added. If there are existing duplicate values, this will fail. - -*/ --- CreateIndex -CREATE UNIQUE INDEX "Anmeldung_email_key" ON "Anmeldung"("email"); diff --git a/prisma/migrations/20250415125317_dienststellen/migration.sql b/prisma/migrations/20250415125317_dienststellen/migration.sql deleted file mode 100644 index 7e06d99..0000000 --- a/prisma/migrations/20250415125317_dienststellen/migration.sql +++ /dev/null @@ -1,52 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `wunsch1` on the `Anmeldung` table. All the data in the column will be lost. - - You are about to drop the column `wunsch2` on the `Anmeldung` table. All the data in the column will be lost. - - You are about to drop the column `wunsch3` on the `Anmeldung` table. All the data in the column will be lost. - - Added the required column `wunsch1Id` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. - - Added the required column `wunsch2Id` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. - - Added the required column `wunsch3Id` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. - -*/ --- CreateTable -CREATE TABLE "Dienststelle" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "name" TEXT NOT NULL -); - --- 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, - "schulart" TEXT NOT NULL, - "zeitraum" TEXT NOT NULL, - "motivation" TEXT NOT NULL, - "wunsch1Id" INTEGER NOT NULL, - "wunsch2Id" INTEGER NOT NULL, - "wunsch3Id" 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 -); -INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "zeitraum") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "zeitraum" 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; - --- CreateIndex -CREATE UNIQUE INDEX "Dienststelle_name_key" ON "Dienststelle"("name"); diff --git a/prisma/migrations/20250417130201_add_admin/migration.sql b/prisma/migrations/20250417130201_add_admin/migration.sql deleted file mode 100644 index ab97a5b..0000000 --- a/prisma/migrations/20250417130201_add_admin/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- CreateTable -CREATE TABLE "Admin" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT DEFAULT 1, - "password" TEXT NOT NULL -); diff --git a/prisma/migrations/20250424064742_add_pdf_upload/migration.sql b/prisma/migrations/20250424064742_add_pdf_upload/migration.sql deleted file mode 100644 index 82329e5..0000000 --- a/prisma/migrations/20250424064742_add_pdf_upload/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "Anmeldung" ADD COLUMN "pdfdatei" TEXT; diff --git a/prisma/migrations/20250424084609_add_pdf_upload/migration.sql b/prisma/migrations/20250424084609_add_pdf_upload/migration.sql deleted file mode 100644 index 248fe85..0000000 --- a/prisma/migrations/20250424084609_add_pdf_upload/migration.sql +++ /dev/null @@ -1,39 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `pdfdatei` on the `Anmeldung` table. All the data in the column will be lost. - -*/ --- 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, - "schulart" TEXT NOT NULL, - "zeitraum" TEXT NOT NULL, - "motivation" TEXT NOT NULL, - "pdfDatei" TEXT, - "wunsch1Id" INTEGER NOT NULL, - "wunsch2Id" INTEGER NOT NULL, - "wunsch3Id" 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 -); -INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zeitraum") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zeitraum" 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/20250424085826_add_pdfdatei_relation/migration.sql b/prisma/migrations/20250424085826_add_pdfdatei_relation/migration.sql deleted file mode 100644 index a32af3d..0000000 --- a/prisma/migrations/20250424085826_add_pdfdatei_relation/migration.sql +++ /dev/null @@ -1,46 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `pdfDatei` on the `Anmeldung` table. All the data in the column will be lost. - -*/ --- CreateTable -CREATE TABLE "PdfDatei" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "pfad" TEXT NOT NULL, - "anmeldungId" INTEGER NOT NULL, - CONSTRAINT "PdfDatei_anmeldungId_fkey" FOREIGN KEY ("anmeldungId") REFERENCES "Anmeldung" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); - --- 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, - "schulart" TEXT NOT NULL, - "zeitraum" TEXT NOT NULL, - "motivation" TEXT NOT NULL, - "wunsch1Id" INTEGER NOT NULL, - "wunsch2Id" INTEGER NOT NULL, - "wunsch3Id" 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 -); -INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zeitraum") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zeitraum" 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/20250509063847_plaetze/migration.sql b/prisma/migrations/20250509063847_plaetze/migration.sql deleted file mode 100644 index 554a442..0000000 --- a/prisma/migrations/20250509063847_plaetze/migration.sql +++ /dev/null @@ -1,20 +0,0 @@ -/* - Warnings: - - - Added the required column `plaetze` to the `Dienststelle` 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_Dienststelle" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "name" TEXT NOT NULL, - "plaetze" INTEGER NOT NULL -); -INSERT INTO "new_Dienststelle" ("id", "name") SELECT "id", "name" FROM "Dienststelle"; -DROP TABLE "Dienststelle"; -ALTER TABLE "new_Dienststelle" RENAME TO "Dienststelle"; -CREATE UNIQUE INDEX "Dienststelle_name_key" ON "Dienststelle"("name"); -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250520124044_add_praktikumszeitraum/migration.sql b/prisma/migrations/20250520124044_add_praktikumszeitraum/migration.sql deleted file mode 100644 index 0878969..0000000 --- a/prisma/migrations/20250520124044_add_praktikumszeitraum/migration.sql +++ /dev/null @@ -1,45 +0,0 @@ --- CreateTable -CREATE TABLE "Praktikumszeitraum" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "bezeichnung" TEXT NOT NULL, - "startDatum" DATETIME NOT NULL, - "endDatum" DATETIME NOT NULL -); - --- 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, - "schulart" TEXT NOT NULL, - "zeitraum" TEXT NOT NULL, - "motivation" TEXT NOT NULL, - "praktikumId" INTEGER, - "wunsch1Id" INTEGER NOT NULL, - "wunsch2Id" INTEGER NOT NULL, - "wunsch3Id" INTEGER NOT NULL, - "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT "Anmeldung_praktikumId_fkey" FOREIGN KEY ("praktikumId") REFERENCES "Praktikumszeitraum" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, - 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 -); -INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zeitraum") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zeitraum" 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; - --- CreateIndex -CREATE UNIQUE INDEX "Praktikumszeitraum_bezeichnung_key" ON "Praktikumszeitraum"("bezeichnung"); diff --git a/prisma/migrations/20250604135706_noten_und_sozialverhalten/migration.sql b/prisma/migrations/20250604135706_noten_und_sozialverhalten/migration.sql deleted file mode 100644 index 7fddbc6..0000000 --- a/prisma/migrations/20250604135706_noten_und_sozialverhalten/migration.sql +++ /dev/null @@ -1,46 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `zeitraum` on the `Anmeldung` table. All the data in the column will be lost. - - Added the required column `noteDeutsch` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. - - Added the required column `noteMathe` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. - - Added the required column `sozialverhalten` to the `Anmeldung` table without a default value. This is not possible if the table is not empty. - - Made the column `praktikumId` on table `Anmeldung` required. This step will fail if there are existing NULL values in that column. - -*/ --- 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, - "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT "Anmeldung_praktikumId_fkey" FOREIGN KEY ("praktikumId") REFERENCES "Praktikumszeitraum" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, - 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 -); -INSERT INTO "new_Anmeldung" ("anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "praktikumId", "schulart", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id") SELECT "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "ort", "plz", "praktikumId", "schulart", "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/20250604142543_praktikum_id_only/migration.sql b/prisma/migrations/20250604142543_praktikum_id_only/migration.sql deleted file mode 100644 index 70f26e8..0000000 --- a/prisma/migrations/20250604142543_praktikum_id_only/migration.sql +++ /dev/null @@ -1,35 +0,0 @@ --- 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, - "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 -); -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/20250617085825_fix_zugewiesen_relation/migration.sql b/prisma/migrations/20250617085825_fix_zugewiesen_relation/migration.sql deleted file mode 100644 index 0327434..0000000 --- a/prisma/migrations/20250617085825_fix_zugewiesen_relation/migration.sql +++ /dev/null @@ -1,44 +0,0 @@ -/* - 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 deleted file mode 100644 index 9dcb3d5..0000000 --- a/prisma/migrations/20250617091214_make_zugewiesen_optional/migration.sql +++ /dev/null @@ -1,38 +0,0 @@ --- 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/migrations/20250726071314_init/migration.sql b/prisma/migrations/20250726071314_init/migration.sql deleted file mode 100644 index 8a6a795..0000000 --- a/prisma/migrations/20250726071314_init/migration.sql +++ /dev/null @@ -1,50 +0,0 @@ -/* - Warnings: - - - You are about to drop the `Anmeldung` table. If the table is not empty, all the data it contains will be lost. - -*/ --- DropIndex -DROP INDEX "Anmeldung_email_key"; - --- DropTable -PRAGMA foreign_keys=off; -DROP TABLE "Anmeldung"; -PRAGMA foreign_keys=on; - --- CreateTable -CREATE TABLE "anmeldungen" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "anrede" TEXT NOT NULL, - "vorname" TEXT NOT NULL, - "nachname" TEXT NOT NULL, - "email" TEXT NOT NULL, - "noteDeutsch" TEXT, - "noteMathe" TEXT, - "sozialverhalten" TEXT, - "status" TEXT NOT NULL DEFAULT 'OFFEN', - "zugewiesenId" INTEGER, - "wunsch1Id" INTEGER, - "wunsch2Id" INTEGER, - "wunsch3Id" INTEGER, - "timestamp" BIGINT NOT NULL, - CONSTRAINT "anmeldungen_zugewiesenId_fkey" FOREIGN KEY ("zugewiesenId") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch1Id_fkey" FOREIGN KEY ("wunsch1Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch2Id_fkey" FOREIGN KEY ("wunsch2Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch3Id_fkey" FOREIGN KEY ("wunsch3Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE -); - --- RedefineTables -PRAGMA defer_foreign_keys=ON; -PRAGMA foreign_keys=OFF; -CREATE TABLE "new_PdfDatei" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "pfad" TEXT NOT NULL, - "anmeldungId" INTEGER NOT NULL, - CONSTRAINT "PdfDatei_anmeldungId_fkey" FOREIGN KEY ("anmeldungId") REFERENCES "anmeldungen" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); -INSERT INTO "new_PdfDatei" ("anmeldungId", "id", "pfad") SELECT "anmeldungId", "id", "pfad" FROM "PdfDatei"; -DROP TABLE "PdfDatei"; -ALTER TABLE "new_PdfDatei" RENAME TO "PdfDatei"; -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250726074332_add_email_config/migration.sql b/prisma/migrations/20250726074332_add_email_config/migration.sql deleted file mode 100644 index 2c0f44c..0000000 --- a/prisma/migrations/20250726074332_add_email_config/migration.sql +++ /dev/null @@ -1,16 +0,0 @@ --- CreateTable -CREATE TABLE "email_config" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT DEFAULT 1, - "subject" TEXT NOT NULL DEFAULT 'Praktikumsplatz-Zusage', - "template" TEXT NOT NULL DEFAULT 'Sehr geehrte/r {anrede} {nachname}, - -wir freuen uns, Ihnen mitteilen zu können, dass Ihre Bewerbung für ein Praktikum erfolgreich war. - -Sie wurden für das Praktikum bei folgender Dienststelle angenommen: -{dienststelle} - -Weitere Informationen erhalten Sie in den kommenden Tagen. - -Mit freundlichen Grüßen -Ihr Praktikumsteam' -); diff --git a/prisma/migrations/20250726100050_add_status_tracking/migration.sql b/prisma/migrations/20250726100050_add_status_tracking/migration.sql deleted file mode 100644 index ade0aec..0000000 --- a/prisma/migrations/20250726100050_add_status_tracking/migration.sql +++ /dev/null @@ -1,62 +0,0 @@ -/* - Warnings: - - - You are about to alter the column `noteDeutsch` on the `anmeldungen` table. The data in that column could be lost. The data in that column will be cast from `String` to `Int`. - - You are about to alter the column `noteMathe` on the `anmeldungen` table. The data in that column could be lost. The data in that column will be cast from `String` to `Int`. - - You are about to alter the column `timestamp` on the `anmeldungen` table. The data in that column could be lost. The data in that column will be cast from `BigInt` to `DateTime`. - - Added the required column `geburtsdatum` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Added the required column `hausnummer` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Added the required column `ort` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Added the required column `plz` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Added the required column `schulart` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Added the required column `strasse` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Added the required column `telefon` to the `anmeldungen` table without a default value. This is not possible if the table is not empty. - - Made the column `noteDeutsch` on table `anmeldungen` required. This step will fail if there are existing NULL values in that column. - - Made the column `noteMathe` on table `anmeldungen` required. This step will fail if there are existing NULL values in that column. - -*/ --- RedefineTables -PRAGMA defer_foreign_keys=ON; -PRAGMA foreign_keys=OFF; -CREATE TABLE "new_anmeldungen" ( - "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, - "schulart" TEXT NOT NULL, - "schulklasse" TEXT, - "noteDeutsch" INTEGER NOT NULL, - "noteMathe" INTEGER NOT NULL, - "sozialverhalten" TEXT, - "motivation" TEXT, - "alter" INTEGER, - "status" TEXT NOT NULL DEFAULT 'OFFEN', - "processedBy" TEXT, - "processedAt" DATETIME, - "praktikumId" INTEGER, - "zugewiesenId" INTEGER, - "wunsch1Id" INTEGER, - "wunsch2Id" INTEGER, - "wunsch3Id" INTEGER, - "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT "anmeldungen_praktikumId_fkey" FOREIGN KEY ("praktikumId") REFERENCES "Praktikumszeitraum" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_zugewiesenId_fkey" FOREIGN KEY ("zugewiesenId") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch1Id_fkey" FOREIGN KEY ("wunsch1Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch2Id_fkey" FOREIGN KEY ("wunsch2Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch3Id_fkey" FOREIGN KEY ("wunsch3Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE -); -INSERT INTO "new_anmeldungen" ("anrede", "email", "id", "nachname", "noteDeutsch", "noteMathe", "sozialverhalten", "status", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zugewiesenId") SELECT "anrede", "email", "id", "nachname", "noteDeutsch", "noteMathe", "sozialverhalten", "status", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zugewiesenId" FROM "anmeldungen"; -DROP TABLE "anmeldungen"; -ALTER TABLE "new_anmeldungen" RENAME TO "anmeldungen"; -CREATE INDEX "anmeldungen_status_idx" ON "anmeldungen"("status"); -CREATE INDEX "anmeldungen_processedAt_idx" ON "anmeldungen"("processedAt"); -CREATE INDEX "anmeldungen_zugewiesenId_idx" ON "anmeldungen"("zugewiesenId"); -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250726135031_on_delete/migration.sql b/prisma/migrations/20250726135031_on_delete/migration.sql deleted file mode 100644 index 163ace0..0000000 --- a/prisma/migrations/20250726135031_on_delete/migration.sql +++ /dev/null @@ -1,14 +0,0 @@ --- RedefineTables -PRAGMA defer_foreign_keys=ON; -PRAGMA foreign_keys=OFF; -CREATE TABLE "new_PdfDatei" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "pfad" TEXT NOT NULL, - "anmeldungId" INTEGER NOT NULL, - CONSTRAINT "PdfDatei_anmeldungId_fkey" FOREIGN KEY ("anmeldungId") REFERENCES "anmeldungen" ("id") ON DELETE CASCADE ON UPDATE CASCADE -); -INSERT INTO "new_PdfDatei" ("anmeldungId", "id", "pfad") SELECT "anmeldungId", "id", "pfad" FROM "PdfDatei"; -DROP TABLE "PdfDatei"; -ALTER TABLE "new_PdfDatei" RENAME TO "PdfDatei"; -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250726135957_remove_processed_by/migration.sql b/prisma/migrations/20250726135957_remove_processed_by/migration.sql deleted file mode 100644 index 9b6ad01..0000000 --- a/prisma/migrations/20250726135957_remove_processed_by/migration.sql +++ /dev/null @@ -1,50 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `processedBy` on the `anmeldungen` table. All the data in the column will be lost. - -*/ --- RedefineTables -PRAGMA defer_foreign_keys=ON; -PRAGMA foreign_keys=OFF; -CREATE TABLE "new_anmeldungen" ( - "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, - "schulart" TEXT NOT NULL, - "schulklasse" TEXT, - "noteDeutsch" INTEGER NOT NULL, - "noteMathe" INTEGER NOT NULL, - "sozialverhalten" TEXT, - "motivation" TEXT, - "alter" INTEGER, - "status" TEXT NOT NULL DEFAULT 'OFFEN', - "processedAt" DATETIME, - "praktikumId" INTEGER, - "zugewiesenId" INTEGER, - "wunsch1Id" INTEGER, - "wunsch2Id" INTEGER, - "wunsch3Id" INTEGER, - "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT "anmeldungen_praktikumId_fkey" FOREIGN KEY ("praktikumId") REFERENCES "Praktikumszeitraum" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_zugewiesenId_fkey" FOREIGN KEY ("zugewiesenId") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch1Id_fkey" FOREIGN KEY ("wunsch1Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch2Id_fkey" FOREIGN KEY ("wunsch2Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, - CONSTRAINT "anmeldungen_wunsch3Id_fkey" FOREIGN KEY ("wunsch3Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE -); -INSERT INTO "new_anmeldungen" ("alter", "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "noteDeutsch", "noteMathe", "ort", "plz", "praktikumId", "processedAt", "schulart", "schulklasse", "sozialverhalten", "status", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zugewiesenId") SELECT "alter", "anrede", "email", "geburtsdatum", "hausnummer", "id", "motivation", "nachname", "noteDeutsch", "noteMathe", "ort", "plz", "praktikumId", "processedAt", "schulart", "schulklasse", "sozialverhalten", "status", "strasse", "telefon", "timestamp", "vorname", "wunsch1Id", "wunsch2Id", "wunsch3Id", "zugewiesenId" FROM "anmeldungen"; -DROP TABLE "anmeldungen"; -ALTER TABLE "new_anmeldungen" RENAME TO "anmeldungen"; -CREATE INDEX "anmeldungen_status_idx" ON "anmeldungen"("status"); -CREATE INDEX "anmeldungen_processedAt_idx" ON "anmeldungen"("processedAt"); -CREATE INDEX "anmeldungen_zugewiesenId_idx" ON "anmeldungen"("zugewiesenId"); -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250726142352_plaetzze_not_negativ/migration.sql b/prisma/migrations/20250726142352_plaetzze_not_negativ/migration.sql deleted file mode 100644 index 9d616ce..0000000 --- a/prisma/migrations/20250726142352_plaetzze_not_negativ/migration.sql +++ /dev/null @@ -1,14 +0,0 @@ --- RedefineTables -PRAGMA defer_foreign_keys=ON; -PRAGMA foreign_keys=OFF; -CREATE TABLE "new_Dienststelle" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "name" TEXT NOT NULL, - "plaetze" INTEGER NOT NULL DEFAULT 0 -); -INSERT INTO "new_Dienststelle" ("id", "name", "plaetze") SELECT "id", "name", "plaetze" FROM "Dienststelle"; -DROP TABLE "Dienststelle"; -ALTER TABLE "new_Dienststelle" RENAME TO "Dienststelle"; -CREATE UNIQUE INDEX "Dienststelle_name_key" ON "Dienststelle"("name"); -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20251125082147_prisma6/migration.sql b/prisma/migrations/20251125082147_prisma6/migration.sql new file mode 100644 index 0000000..f797bae --- /dev/null +++ b/prisma/migrations/20251125082147_prisma6/migration.sql @@ -0,0 +1,114 @@ +-- CreateTable +CREATE TABLE "Admin" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT DEFAULT 1, + "password" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "email_config" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT DEFAULT 1, + "subject" TEXT NOT NULL DEFAULT 'Praktikumsplatz-Zusage', + "template" TEXT NOT NULL DEFAULT 'Sehr geehrte/r {anrede} {nachname}, + +wir freuen uns, Ihnen mitteilen zu können, dass Ihre Bewerbung für ein Praktikum erfolgreich war. + +Sie wurden für das Praktikum bei folgender Dienststelle angenommen: +{dienststelle} + +Weitere Informationen erhalten Sie in den kommenden Tagen. + +Mit freundlichen Grüßen +Ihr Praktikumsteam' +); + +-- CreateTable +CREATE TABLE "Dienststelle" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL, + "plaetze" INTEGER NOT NULL DEFAULT 0 +); + +-- CreateTable +CREATE TABLE "Praktikumszeitraum" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "bezeichnung" TEXT NOT NULL, + "startDatum" DATETIME NOT NULL, + "endDatum" DATETIME NOT NULL +); + +-- CreateTable +CREATE TABLE "zeitraum_plaetze" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "zeitraumId" INTEGER NOT NULL, + "dienststelleId" INTEGER NOT NULL, + "plaetze" INTEGER NOT NULL DEFAULT 0, + CONSTRAINT "zeitraum_plaetze_zeitraumId_fkey" FOREIGN KEY ("zeitraumId") REFERENCES "Praktikumszeitraum" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "zeitraum_plaetze_dienststelleId_fkey" FOREIGN KEY ("dienststelleId") REFERENCES "Dienststelle" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "anmeldungen" ( + "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, + "schulart" TEXT NOT NULL, + "schulklasse" TEXT, + "noteDeutsch" INTEGER NOT NULL, + "noteMathe" INTEGER NOT NULL, + "sozialverhalten" TEXT, + "motivation" TEXT, + "alter" INTEGER, + "status" TEXT NOT NULL DEFAULT 'OFFEN', + "processedAt" DATETIME, + "praktikumId" INTEGER, + "zugewiesenId" INTEGER, + "wunsch1Id" INTEGER, + "wunsch2Id" INTEGER, + "wunsch3Id" INTEGER, + "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT "anmeldungen_praktikumId_fkey" FOREIGN KEY ("praktikumId") REFERENCES "Praktikumszeitraum" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "anmeldungen_zugewiesenId_fkey" FOREIGN KEY ("zugewiesenId") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "anmeldungen_wunsch1Id_fkey" FOREIGN KEY ("wunsch1Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "anmeldungen_wunsch2Id_fkey" FOREIGN KEY ("wunsch2Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "anmeldungen_wunsch3Id_fkey" FOREIGN KEY ("wunsch3Id") REFERENCES "Dienststelle" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "PdfDatei" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "pfad" TEXT NOT NULL, + "anmeldungId" INTEGER NOT NULL, + CONSTRAINT "PdfDatei_anmeldungId_fkey" FOREIGN KEY ("anmeldungId") REFERENCES "anmeldungen" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateIndex +CREATE UNIQUE INDEX "Dienststelle_name_key" ON "Dienststelle"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "Praktikumszeitraum_bezeichnung_key" ON "Praktikumszeitraum"("bezeichnung"); + +-- CreateIndex +CREATE INDEX "zeitraum_plaetze_zeitraumId_idx" ON "zeitraum_plaetze"("zeitraumId"); + +-- CreateIndex +CREATE INDEX "zeitraum_plaetze_dienststelleId_idx" ON "zeitraum_plaetze"("dienststelleId"); + +-- CreateIndex +CREATE UNIQUE INDEX "zeitraum_plaetze_zeitraumId_dienststelleId_key" ON "zeitraum_plaetze"("zeitraumId", "dienststelleId"); + +-- CreateIndex +CREATE INDEX "anmeldungen_status_idx" ON "anmeldungen"("status"); + +-- CreateIndex +CREATE INDEX "anmeldungen_processedAt_idx" ON "anmeldungen"("processedAt"); + +-- CreateIndex +CREATE INDEX "anmeldungen_zugewiesenId_idx" ON "anmeldungen"("zugewiesenId"); diff --git a/prisma/prisma/praktika.db b/prisma/prisma/praktika.db new file mode 100644 index 0000000000000000000000000000000000000000..06d9aec040f0ab136f0e03924a6db2eacde670fd GIT binary patch literal 94208 zcmeHw3ydSjd1g1eNe(%WntgIt+MVs0)na#|=}|Y?Y?6`V+tCbnHPFuNdLC!5oD0$H zuAZTWkJ)B(U$z6cYz2xg7sRlg$g%@D31UD=93+=JBaRH6;SF$xaS41EToT_UxRdWL z4+Q}(xj;#vB*aXhhtD9Y`AG%O+v1B)#n&C$|6KW!!I(d?Re%dw4RczF2xN5cP8@L{bCg)d*b8AIuZSJuPMQJJ^ znUc;VCD^7a)|9lkyjDD4T#=S9u1U-57cNMbRu-4$RxV3V6faA2>uVPmm*GT9#pSh` zwvthIu!X0jwch7YZx!I~3du2zZTh*O{beO9*T)co= zF39`qB#>swa5sU1-dgLVXf|$EjOtbFY#LP;cd&P4wT4@{YPgkdkvfM-Lg1`(!tQxo zsD@@w`J{#7xw-WVYtre9=gt+EPj}L8I}H;zgcVUX5<44v#_hFgp>3Dd=ul{6IycGyAqG5 zRF(hKC^eVd+4OWb!)E_ zQ05QB;;B=o_@^JGWe$=TjK{;}42tfpgnJK;?!e5Ug)31C|JjoiJ{_Wz%tqa=Yy{)6 zF#MqCEyDNPn%b?2R{1Gx_71rGWT$sb0}AHel%H%hjSbu#P`J284)+f9cGOq#rXy`& z2wnV$BYmtrBK?H)vF-@-6En%=wTdIz4sPMP1fz)=X>qd-(OSiIait2en=NVU*4OHA za7MCVI0gwEEIo#=VW$ixCfT>X;Yhermwd1icI-xV!y#5ET{E27WOB8FrE4w6g7eYz zaH2r^GOmC_QH5c-g&iqqCz3%1>kSyL)_*YhF)Ps5eIl9sFboYaU|FoUy%89(!TGym zI*H^7ut=U;^b91n2K?0l&{D;vrLJ35Kna5L&aH3UdJ)%?P`n*zaG^J9r<2o{#8~R# zhxyCYV47E|ka4MruK;NA*LA97$O)~NeZ6V~Hc4SxTmF6b4N(Qv0ovqusbyE4IDYZM0PQu+zSZ!>; zsJ?F_NjoQV8ZZL1N@c^`3g+6ACGBeaaQUNuzt{EKtl4rLTz57$#fAP8D#_{jNG$bXmFFtZysmc)(rCF2`n}X&aV53?n9z2v zM}|fr!lN1o|7>FnFa{U{i~+^~V}LQh7+?%A1{ed30mcAh;C?XRjq}NMZ!}uqxM)I8 z=gqQe7Gyhnp`&1IG;1@f^8~>rR0^YX=Zb_QPyxdQz+y!s%4dR+sZ0t z);7|123v+|7c^YR=X17RRuomW^lYwN(6jstzxBYaTv|zIRW+Se@@ZAebtVIJDoZD! zTs-|#u#7>Fa{U{i~+^~V}LQh7+?%A1{ed30mi_6WMCvN9Oo}tHoTn$ zS56!j1(o+-yy3qrD|#?0$b9cxawY*rEO80Ngp+*WEq5oz1>qDQeCtLGMTAp{;0sTN zcp;UbucDy$|Hr<_!9Uv=1B?O20AqkLz!+c*Fa{U{i~+^~V}LR6|AT?2%Y2k8JoDg= zKOB5(CVLs?eR&xs@&99EzssR-qtBx5SA#qQfr%t_(pgkF}f)tKrx)(!Xptuv$hTC+Gix9s0%44$HZtanbH z<$vbZ51B?O2z`L1& zxD@4hJ`s(@Pmsuv7>iHPh!Be(r;$i3b}Y&z_@P+*Xgh5*exw}{OM2L^HBazrJL=r5g{ILM*uKH5{XC*W*icvY%sR~doc#H2(TAoFj)ZmNED_85{U%y z|082x=f=K{o*KPAdY%9LoBeVB{oP!p0c@Up_(AT_(aFgN(ec#e!;^^T%~3AJ@lbvq zrc;d8lHpWbW2x12u~UPmLeh$=$VyIDbMTA>d72~LeO81>;4hugvaqybu0|El){IJZ z)@;;Puu+AFKw4E?5TeDp+uU|4=B5izU(}_dbIowv7J0fvf?sT0ZNS4AHEF$O8}*Hg z=gt+E#fSh)F+Ml>2cCSWgV#HG3}Oe`$WJ|b0+7#*@?GRGiR3I9*Lz^As;sI6cC(4q zE^K(-qcJKSaPD zyz77L$!L)9PI&Uz0O7sX@Z`|}!h7{aPaYW{yv^(0>~IM0zI(VH-)VbO)wgm%rVVc7 zA#XN0NPvg8z1hSd0ZzW+%?=F|V9A?}4-(+S4|}t*K>|GVk~bS2B*5`Eyjk%r0QOE! zfYx0O@fBHB?sp+1!pJvZo8>`yzMlLirwus*2GL z3IPVfFOR+OJ#RMB&#*VU8-bHi@O{C%+rvkC2MC;7K3`nExU^JU=3n^cbKe!(?h
|(xiF3%a}W&?it&~{0IP!WYtJ@e9Qq5#*pmoxwV)+oBnMbIP% zck{mupUK3lclQ_Yw^@`iz!+c*Fa{U{i~+^~W8mGufPPHm8vG-z?P|lYnvbYzp-|4^ zjBI6;f~;w_Dd+97Ca0~mowL(gCT&`?+m?L{U5*X~^o(2<5^J`c##UO^R6~`Gd|H(Y zIX$msl|0U6%S7)%{ee(^*>X0U&MH{ebE*k?8mJg)L)KMQ#W~H?EY%=-59mijdYYvu zc~vvyT-vf_EobHAGOS%C>t^0GH4}css_8`UsD31*m(~heI%nvzmM$o=X2RVZBd0<3 zS|*n+(mIO2CP2C|^#KO(lcXa;}`s=L$qGr5_IIsitYB z(@?5R+AhnQ0+|-994KQwqXN<8a>gWjhxJ1tJu6pE>jva!+j&dY%C;rv^^7Ll`CP`b z3fY39t3>aRelV;DH*%m1;1pQckhP4i$%O*eWfdEC0cudgY0Aq%{Xj^soVD{x)-+|y zDC9^zWT4))teiD-g|w9|r;V~r@;jjK59z_}E;Em@B4-L3lut7>A zYH6akU*8wfD_~W}`FvWovT7bGLoLgOk;};CtY)ZormPlhYA^fr@sOTn+Zd=cWt`1| zo}R-pq|eHVp3bW|Y+L0l<#Sv|A-!^5$?K}A$mxs?_M)eAa^A}2<-CH`OvX%Gd6nje z^s$hhp#cqphEqrx|}cPO&RJfXJ!njRE5^Vm_8cPQ*>R^3K>gID;Vmppyi>; zp+zZB>4j`w&zH-Tmr;Erq?ak=pn}s`s6QR*!BzpMp0Q;GaxNQrC1d3^!sm!S9MV&C z%gkF?lNDP5x40a6d)+m5p*3QUj+km;(vS#HA)Xoz6P)IMER;&UPAL?;~~9_ZopP3fL;ddT7kxthmJ}vn>zG5(8H9=d7>BB z;V1rqeo4)1Sjk~iHp(W{pO#I_M#j*U4tx~^ceDM3nuw=Pp5&jOc8zis2Nom7L8=}c0BZK`5TNsG&C#q-4#Y5C%sw7h=df^=zRacOSl zvh+mpvNX58c5!hTz```n+Du!?s5{ugQ_@=TBcRdI>d3A(oVrolLs*CDn7ySNxZHBw zre(OT+U_TBwr}e1F5EO)&3cRcZe(|P!*O>PY*%mYE^u)b+l~6}Li)hK?jkzd1dlr0 zM!HocPbah!beO9*T)co=E@=1HNg&OV;ckLvZ>@DwG#fW7Mit)av1wFY+`-^w929v0ta@#6 zsp!j$Ew{4Osx9tVT1RxVwSliyFuc{HUv{lk2OiYD1nIp5nSOy=so|z;)V6o9`9|v( zXnuWV1q{4Ikgu-IEnRA3oWHody0$V0)Iby6X+EWG$1hdM-oiJgq;nTnii_u$X`4AS z6_8I&ODn~5ML7F>aaEeyd4+3t5ff;Oq!~_27ncFfg(7qctHn-BghT6>2&2;c-0J+? zLWkA8U>@dA9b?vVNuinA#P2BrE5xzq8itp_b(mh+Cx%!Q=(>+)fTyMJYKpH$I zcAI1!^nU;4pT=+7N`G7KX5TG)se53L+Sn2IRL31P=T6%t4gAeob2lR&SeS)fO(mS9 z2jH6+@1D?-)83VMJf*7qr$(u{^p~{%$WYj1`V-un(Ugge!UzI}Fg+Khj>$kb@3^pj z6d6BsuS32)bkg9uwO0x#^9N$_)TvYa(~r_J2gwV@`4kgxXx8D9t*<{iryl8zpbg=nrM}u!e;LX$WL~9$291RzvL%dO=AOh2NW)@k;A>C z$Q^a|%Jcj3%Jb97=}TfP_3*>|Woj_ZE7gjNOHF*Gh3hb+3xAD<%%(?phM4XQXij^> zLOhj9@m`Cbldi2s12LpOMUUMtd)tQL^tFZqW6Y3KlAQk3lRWLkeyl{%z{suAtQn`J}T+{9MNfVQ-= zbvw6CD!(+Pb_dc)xZ4S$Uh1#7lG=Yv0B?GTc;Dpt|DA|kEepKSt0+h1hX(*Vb^)u-$Ap!y!fH@B1~}6`shs+ z^!@tJ*#_IIL#hc^U^bG@Yt2YgVMQp%17q>js?2+HyO$%Jp0LMV}j-4Ay%>D)u;9u5spyW^Dx7kI9vQyl3*lmyn68%h#sFi0F~AsL3@`>51B?O20AqkLz!(?=1|AkZ%HQE4fH6&|@prohVDu5e zBuaO>1fZx28~k0Z04Q`c?tB5jNLIK)RvEm@_5Xm|#E<6)}(Ql(y&~KuDi+%-_&{xox z(F^Ev=qJ%-^elQBeH>kdbpco3%Z#(KF$Nd|i~+^~V}LQh7+?%A1{ed30mcAhU=IeO z0xUovkx)EALScf0k>jF};Ez$^Q5qhhVTy)_X?Tc);z1f7py7TR?xW#22?a#MF&d82 zaD;}#B#b0!n4sYh4dXP7k<6nc5J@1AAR-8fMBD#gA^!jWK;J^Y2!8$R=zHiJ=tc1F z|1bJI^fmMa@bh0ozk_}aeHQ%v|Be15`X%&l!0&$wS?EX5N6^Y1Jg~!z0mcAhfHA-r zU<@z@7z2y}#sFi0F~Asj4>Lgg?HG0cW7PeRQTIP~oE{JO|04DO1?vAt4ikr*y8qFD z`!7)UKeCSqsrMhH-oF^|{v#tqNS*&Eb^b-_{0klDp9o_l=V+9KqDVqPAYmln{~zPf z8|ZJ~?*E^_EWiiQAHu!=Z=-L*eSZ!8I(iBH9LxcH2F;-7U{2sBa=`O{2$|@kXcawy z=FzeDaAmThF$Nd|i~+^~V}LQh7+?%A1{ed30mi`lfPuKkgX0{N=w6JSpnD-ULHCi^ z@tBwZSN~W$S@dXoFCJ;{g;aYVIUEytxc7dDeifq!+k5dqdoS#7?<4zYGI5-K6{4uU z7suLrVYI!EjL>AlF#Q^dCfj>4(cTL~?R_LplSN__Vl+y3qDXgwKzEUdC??wX|0C%8 z96a;?S8(6|dt-locYp5#Ghjtz3@`>51B?O20AqkLz!+c*Fa{U{jDbO7AR(l9x_~iGi~6xKVUnL)K3`nExCE=&PlUgoAkY6t(4PwM+y6g>`~QE5T6gz1 zNG8CrG6om}i~+^~V}LQh7+?%A1{ed30mcAh;2mW^6gd7E`fINFAc;Ldf}pE`5+D+ckzkYr@H+sGA0|PP1PKxhkswZw2~nPZ;hWEW zSC~k)qtCqb+6j*D`2VkS@T>nfnE(HdS^>+9F~AsL3@`>51B?O20AqkLz!+c*Fb3Z1 z3=og}o%R3W{eK*J{~yOs0J$(Zkl-gsaH2ys5Bt>U{~LX5Dt0o8swzrWRnuyoZZ+fj zY|U3Zi)%)uI&0zcH)?gGS!vY@VzgLyo7+ys+;k-i*QKI!&2ZdSeFN7KeQHLC2>c5# z$G>#NlMe#QqivLv4^IM0bCm0%Jm(m#CBvz>Mh{RWC#yLE^wx_w-33aD0DtL>mesSl zT#YK8rRdB?Z3P?Ern%Xw;(~A+d{U(@U2RmWxF)UFY@@zG@rnfRZ#_40(31}g2Hq&( z{qeaKPu@R3c+Y;$llKh}-Vd&M^7wtj3k|Jnzgb<+-(UNUfIWEE|Jak!AmN?xWiK{GC+8n*S*={5Z-HabXv<8OGg;vfNzjeE1g00I8wx1!!`WRL)V z{mb4N9sq~^x76+YHzh4AD*WHG|CWmhd;4!&xKhVQI!>GjgUTD#-xwV|%MHc9!;SpZ z@DC=ROZ>OQ4-DOme`ol$oxgX1Kg=L71{ed30mcAh;2mSYlMjbR9q;bx&B;ITdN>+J-}?*L9856DfW!J6cTUr&E?AZ~&YtNqu%5b@-rgK?Fhcwf{! W`N&}4r8gN*KH|x#0m3`=$$tjC6E;c! literal 0 HcmV?d00001 diff --git a/prisma/schema.prisma b/prisma/schema.prisma index b8af39b..0459d30 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -6,7 +6,7 @@ generator client { datasource db { provider = "sqlite" - url = "file:./praktika.db" + url = env("DATABASE_URL") } model Admin { @@ -25,11 +25,14 @@ model EmailConfig { model Dienststelle { id Int @id @default(autoincrement()) name String @unique - plaetze Int @default(0) + plaetze Int @default(0) // Standard-Plätze, wird nicht mehr direkt verwendet anmeldungenWunsch1 Anmeldung[] @relation("Wunsch1") anmeldungenWunsch2 Anmeldung[] @relation("Wunsch2") anmeldungenWunsch3 Anmeldung[] @relation("Wunsch3") zugewiesene Anmeldung[] @relation("Zugewiesen") + + // Neue Relation zu ZeitraumPlaetze + zeitraumPlaetze ZeitraumPlaetze[] } model Praktikumszeitraum { @@ -38,6 +41,26 @@ model Praktikumszeitraum { startDatum DateTime endDatum DateTime anmeldungen Anmeldung[] @relation("PraktikumszeitraumAnmeldungen") + + // Neue Relation zu ZeitraumPlaetze + zeitraumPlaetze ZeitraumPlaetze[] +} + +// Neue Zwischentabelle für Plätze pro Zeitraum und Dienststelle +model ZeitraumPlaetze { + id Int @id @default(autoincrement()) + zeitraumId Int + dienststelleId Int + plaetze Int @default(0) + + zeitraum Praktikumszeitraum @relation(fields: [zeitraumId], 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]) + @@index([zeitraumId]) + @@index([dienststelleId]) + @@map("zeitraum_plaetze") } // Erweiterte Status-Enum für bessere Nachverfolgung @@ -70,7 +93,6 @@ model Anmeldung { status Status @default(OFFEN) // Neue Felder für Status-Tracking - // processedBy String? // Wer bearbeitet die Anmeldung processedAt DateTime? // Wann wurde sie bearbeitet // Praktikumszeitraum Relation diff --git a/src/lib/components/AdminNavigation.svelte b/src/lib/components/AdminNavigation.svelte index 3478d8d..d88bd73 100644 --- a/src/lib/components/AdminNavigation.svelte +++ b/src/lib/components/AdminNavigation.svelte @@ -30,6 +30,13 @@ description: 'Praktikumszeiträume verwalten', color: 'bg-purple-600 hover:bg-purple-700' }, + { + href: '/admin/plaetze', + title: 'Plätze verwalten', + icon: '📊', + description: 'Praktikumsplätze pro Zeitraum und Dienststelle festlegen', + color: 'bg-indigo-600 hover:bg-indigo-700' + }, { href: '/admin/change-password', title: 'Passwort ändern', @@ -68,4 +75,4 @@ .group:hover { transform: translateY(-2px); } - + \ No newline at end of file diff --git a/src/lib/components/AnmeldungenTable.svelte b/src/lib/components/AnmeldungenTable.svelte index 62657aa..832fdad 100644 --- a/src/lib/components/AnmeldungenTable.svelte +++ b/src/lib/components/AnmeldungenTable.svelte @@ -22,6 +22,15 @@ }); } + function formatGeburtsdatum(dateString: string | undefined): string { + if (!dateString) return '-'; + return new Date(dateString).toLocaleDateString('de-DE', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }); + } + function formatProcessedDate(timestamp: number | undefined): string { if (!timestamp) return '-'; return new Date(timestamp).toLocaleDateString('de-DE', { @@ -33,7 +42,44 @@ }); } - // Vereinfachte Logik ohne processing Status + function formatZeitraum(zeitraum: any): string { + if (!zeitraum) return '-'; + const start = new Date(zeitraum.startDatum).toLocaleDateString('de-DE', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }); + const end = new Date(zeitraum.endDatum).toLocaleDateString('de-DE', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }); + return `${zeitraum.bezeichnung} (${start} - ${end})`; + } + + // Schulart formatieren + function formatSchulart(schulart: string | undefined): string { + if (!schulart) return '-'; + const mapping: Record = { + 'Gymnasium': 'Gymnasium', + 'KGS_Gymnasialzweig': 'KGS Gymnasialzweig', + 'Fachoberschule': 'Fachoberschule', + 'Realschule': 'Realschule', + 'KGSR': 'KGS Realschulzweig', + 'IGSR': 'IGS Realschulzweig' + }; + return mapping[schulart] || schulart; + } + + // Sozialverhalten kürzen + function formatSozialverhalten(sv: string | undefined): string { + if (!sv) return '-'; + if (sv === 'Entspricht den Erwartungen in vollem Umfang') return 'Voll entspr.'; + if (sv === 'Entspricht den Erwartungen') return 'Entsprechend'; + if (sv === 'Entspricht den Erwartungen mit Einschränkungen') return 'Mit Einschr.'; + return sv; + } + function canBeAccepted(status: string): boolean { return status === 'pending'; } @@ -47,166 +93,234 @@ - - - - - - + {#each anmeldungen as anmeldung (anmeldung.id)} - - - + + - - + + + + + + + + + + + + - - - - - - - - - - @@ -214,4 +328,13 @@ {/each}
+ Status - Bewerber/in + + Persönliche Daten - Noten + + Kontakt & Adresse - Wünsche / Zuweisung + + Schule & Noten - Eingegangen + + Praktikum & Wünsche + + Dokumente + Aktionen
+
{getStatusText(anmeldung.status || 'pending')} +
+ Eingang:
+ {formatDate(anmeldung.timestamp)} +
+ +
{anmeldung.anrede} {anmeldung.vorname} {anmeldung.nachname}
-
- {anmeldung.email} +
+ Geb.: {formatGeburtsdatum(anmeldung.geburtsdatum)}
+ {#if anmeldung.alter} +
+ Alter: {anmeldung.alter} Jahre +
+ {/if} +
+
+
+ Adresse:
+ + {anmeldung.strasse || '-'} {anmeldung.hausnummer || ''}
+ {anmeldung.plz || ''} {anmeldung.ort || ''} +
+
+
+ Tel: + {#if anmeldung.telefon} + {anmeldung.telefon} + {:else} + - + {/if} +
+
+ E-Mail:
+ {anmeldung.email} +
+
+
+
+
+ Schulart:
+ {formatSchulart(anmeldung.schulart)} +
+ {#if anmeldung.schulklasse} +
+ Klasse: + {anmeldung.schulklasse}. Klasse +
+ {/if} +
+ Noten: +
+ + D: {anmeldung.noteDeutsch || '-'} + + + M: {anmeldung.noteMathe || '-'} + +
+
+ {#if anmeldung.sozialverhalten} +
+ Sozialverh.: + {formatSozialverhalten(anmeldung.sozialverhalten)} +
+ {/if} +
+
+
+ + {#if anmeldung.zeitraum} +
+ Zeitraum:
+ {formatZeitraum(anmeldung.zeitraum)} +
+ {/if} + + + {#if anmeldung.assignedDienststelle} +
+
+ + + + Zugewiesen: +
+
{anmeldung.assignedDienststelle.name}
+ {#if anmeldung.processedAt} +
+ {formatProcessedDate(anmeldung.processedAt)} +
+ {/if} +
+ {/if} + + +
+ Wünsche: +
+ {#if anmeldung.wunsch1} +
+ 1 + {anmeldung.wunsch1.name} +
+ {/if} + {#if anmeldung.wunsch2} +
+ 2 + {anmeldung.wunsch2.name} +
+ {/if} + {#if anmeldung.wunsch3} +
+ 3 + {anmeldung.wunsch3.name} +
+ {/if} + {#if !anmeldung.wunsch1 && !anmeldung.wunsch2 && !anmeldung.wunsch3} + Keine Wünsche + {/if} +
+
+ + + {#if anmeldung.motivation} +
+ Motivation: +

{anmeldung.motivation}

+
+ {/if} +
+
{#if anmeldung.pdfs && anmeldung.pdfs.length > 0} -
- {#each anmeldung.pdfs as pdf} +
+ {#each anmeldung.pdfs as pdf, index} - + - PDF ansehen + PDF {index + 1} + + + {/each}
- {/if} -
- {#if anmeldung.noteDeutsch || anmeldung.noteMathe} -
- {#if anmeldung.noteDeutsch} -
D: {anmeldung.noteDeutsch}
- {/if} - {#if anmeldung.noteMathe} -
M: {anmeldung.noteMathe}
- {/if} -
{:else} - - + Keine Dokumente {/if} - {#if anmeldung.sozialverhalten} -
- SV: {anmeldung.sozialverhalten} -
- {/if} -
- - {#if anmeldung.assignedDienststelle} -
-
- - - - Zugewiesen: -
-
- {anmeldung.assignedDienststelle.name} -
- {#if anmeldung.processedAt} -
- {formatProcessedDate(anmeldung.processedAt)} - {#if anmeldung.processedBy} - von {anmeldung.processedBy} - {/if} -
- {/if} -
- {/if} - - -
-
Wünsche:
- {#if anmeldung.wunsch1} -
- 1 - {anmeldung.wunsch1.name} -
- {/if} - {#if anmeldung.wunsch2} -
- 2 - {anmeldung.wunsch2.name} -
- {/if} - {#if anmeldung.wunsch3} -
- 3 - {anmeldung.wunsch3.name} -
- {/if} - {#if !anmeldung.wunsch1 && !anmeldung.wunsch2 && !anmeldung.wunsch3} - Keine Wünsche angegeben - {/if} -
-
-
{formatDate(anmeldung.timestamp)}
+
{#if canBeAccepted(anmeldung.status || 'pending')} {/if} {#if canBeRejected(anmeldung.status || 'pending')} {/if}
- \ No newline at end of file + + + \ No newline at end of file diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts new file mode 100644 index 0000000..4e6ef6a --- /dev/null +++ b/src/lib/prisma.ts @@ -0,0 +1,15 @@ +import { PrismaClient } from '@prisma/client'; + +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClient | undefined; +}; + +export const prisma = + globalForPrisma.prisma ?? + new PrismaClient({ + log: process.env.NODE_ENV !== 'production' ? ['query', 'error', 'warn'] : ['error'], + }); + +if (process.env.NODE_ENV !== 'production') { + globalForPrisma.prisma = prisma; +} \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 4f6ba0a..e1cc2b9 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -32,8 +32,14 @@ let schulklasse = ''; let ablehnungHinweis = ''; let showAblehnungModal = false; - let showIgsHinweis = false; let alter = ''; + + // Validierungsfehler für Echtzeit-Anzeige + let alterFehler = ''; + let notenFehler = ''; + let sozialverhaltenFehler = ''; + + // Berechnung des Alters $: { if (geburtsdatum && zeitraum && zeitraeume.length > 0) { const gewaehlterZeitraum = zeitraeume.find(z => z.id == zeitraum); @@ -47,34 +53,81 @@ if (monthDiff < 0 || (monthDiff === 0 && praktikumStart.getDate() < geburt.getDate())) { altersberechnung--; } - alter = altersberechnung.toString(); + alter = altersberechnung.toString(); } } } - // Überwachung für IGS + Klasse 7 Kombination + // Echtzeit-Validierung: Alter $: { - if (["KGSR", "IGSR"].includes(schulart) && schulklasse === '7') { - showIgsHinweis = true; + const altersWert = parseInt(alter); + if (alter && !isNaN(altersWert) && altersWert < 14) { + alterFehler = 'Du musst mindestens 14 Jahre alt sein, um ein Praktikum beginnen zu können.'; + } else { + alterFehler = ''; } } + // Echtzeit-Validierung: Noten + $: { + const deutsch = parseInt(noteDeutsch); + const mathe = parseInt(noteMathe); + const klasse = parseInt(schulklasse); + + if (noteDeutsch && noteMathe && schulart) { + // Gymnasium oder KGS_Gymnasialzweig: mindestens 4 in Deutsch UND Mathe + if (['Gymnasium', 'KGS_Gymnasialzweig'].includes(schulart)) { + if (!isNaN(deutsch) && !isNaN(mathe) && (deutsch > 4 || mathe > 4)) { + notenFehler = 'Du brauchst mindestens eine 4 in Deutsch und Mathematik.'; + } else { + notenFehler = ''; + } + } + // Fachoberschule Klasse 11 oder 12: mindestens 4 in Deutsch UND Mathe + else if (schulart === 'Fachoberschule' && (klasse === 11 || klasse === 12)) { + if (!isNaN(deutsch) && !isNaN(mathe) && (deutsch > 4 || mathe > 4)) { + notenFehler = 'Du brauchst mindestens eine 4 in Deutsch und Mathematik.'; + } else { + notenFehler = ''; + } + } + // Alle anderen: mindestens 3 in Deutsch UND Mathe + else { + if (!isNaN(deutsch) && !isNaN(mathe) && (deutsch > 3 || mathe > 3)) { + notenFehler = 'Du brauchst mindestens eine 3 in Deutsch und Mathematik.'; + } else { + notenFehler = ''; + } + } + } else { + notenFehler = ''; + } + } + + // Echtzeit-Validierung: Sozialverhalten + $: { + if (sozialverhalten === 'Entspricht den Erwartungen mit Einschränkungen') { + sozialverhaltenFehler = 'Dein Sozialverhalten muss mindestens den Erwartungen entsprechen.'; + } else { + sozialverhaltenFehler = ''; + } + } + + // Prüfen ob Formular gültig ist + $: formHatFehler = alterFehler !== '' || notenFehler !== '' || sozialverhaltenFehler !== ''; + $: filteredDienststellen = (dienststellen ?? []).filter(d => { if (d.plaetze <= 0) return false; - // PK Mitte nur anzeigen wenn mindestens 18 Jahre alt - if (d.name.includes('PK Mitte') || d.name.toLowerCase().includes('polizeikommissariat mitte')) { - return parseInt(alter) >= 18; - } - return true; + if (d.name.includes('PK Mitte') || d.name.toLowerCase().includes('polizeikommissariat mitte')) { + return parseInt(alter) >= 18; } - ); + return true; + }); $: filteredZeitraeume = (zeitraeume ?? []).filter(zeitraum => { const heute = new Date(); const startDatum = new Date(zeitraum.startDatum); - - // Nur Zeiträume anzeigen, die noch nicht gestartet haben return startDatum > heute; }); @@ -82,7 +135,7 @@ $: hideSozialVerhalten = Number(schulklasse) >= 11 && - ["Gymnasium", "KGS_Gymnasialzweig", "IGS_Gymnasialzweig"].includes(schulart); + ["Gymnasium", "KGS_Gymnasialzweig", "Fachoberschule"].includes(schulart); onMount(async () => { const resDienstelle = await fetch('/api/dienststellen'); @@ -91,6 +144,7 @@ const resZeitraeume = await fetch('/api/zeitraeume'); zeitraeume = await resZeitraeume.json(); }); + interface Zeitraum { id: number; bezeichnung: string; @@ -98,9 +152,6 @@ endDatum: string; } let zeitraeume: Zeitraum[] = []; - //let neuerBezeichnung = ''; - //let neuerstartDatum = ''; - //let neuerendDatum = ''; let fehlermeldung = ''; let bearbeiteId: number | null = null; @@ -124,12 +175,21 @@ noteDeutsch = ''; noteMathe = ''; sozialverhalten = ''; + schulklasse = ''; pdfDateien = []; fileInputKey += 1; success = false; + alterFehler = ''; + notenFehler = ''; + sozialverhaltenFehler = ''; } async function anmelden() { + // Abbrechen wenn Validierungsfehler vorhanden + if (formHatFehler) { + return; + } + const data = new FormData(); data.append('anrede', anrede); @@ -158,36 +218,6 @@ data.append('pdfs', pdf); } - const altersWert = parseInt(alter); - if (isNaN(altersWert) || altersWert < 14) { - ablehnungHinweis = 'Du musst mindestens 14 Jahre alt sein, um ein Praktikum beginnen zu können. Bewirb dich gern erneut, wenn du das Mindestalter erreicht hast.'; - showAblehnungModal = true; - return; - } - - const deutsch = parseInt(noteDeutsch); - const mathe = parseInt(noteMathe); - - if (['Gymnasium', 'KGS_Gymnasialzweig', 'IGS_Gymnasialzweig'].includes(schulart) ) { - if (isNaN(deutsch) || isNaN(mathe) || deutsch > 4 && mathe > 4) { - ablehnungHinweis = 'Du brauchst mindestens eine 4 in Deutsch oder Mathematik, um dich bewerben zu können. Bewirb dich gern erneut, wenn du die Voraussetzung erfüllst.'; - showAblehnungModal = true; - return; - } - } else { - if (isNaN(deutsch) || isNaN(mathe) || deutsch > 3 && mathe > 3) { - ablehnungHinweis = 'Du brauchst mindestens eine 3 in Deutsch oder Mathematik, um dich bewerben zu können. Bewirb dich gern erneut, wenn du die Voraussetzung erfüllst.'; - showAblehnungModal = true; - return; - } - } - - if (sozialverhalten === 'Entspricht den Erwartungen mit Einschränkungen') { - ablehnungHinweis = 'Dein Sozialverhalten muss mindestens den Erwartungen entsprechen. Bewirb dich gern erneut, wenn du die Voraussetzung erfüllst.'; - showAblehnungModal = true; - return; - } - const res = await fetch('/api/anmelden', { method: 'POST', body: data @@ -234,17 +264,13 @@ - + - -
- - -
+ - + + + {#if !hideSozialVerhalten} - - {/if} +
+ + {#if sozialverhaltenFehler} +

{sozialverhaltenFehler}

+ {/if} +
+ {/if} + + +
+
+ + +
+ {#if notenFehler} +

{notenFehler}

+ {/if} +
@@ -273,13 +339,20 @@ - startDatum = {new Date(d.startDatum).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })} {/each} - -

Startdatum: {startDatum}

+ + {#if alter} +
+ Alter zu Praktikumsbeginn: {alter} Jahre + {#if alterFehler} +

{alterFehler}

+ {/if} +
+ {/if} +
-
-
+
+ + + {#if isLoading} +
+
+ Lade Plätze... +
+ {:else if plaetze.length === 0} +
+ + + +

Keine Dienststellen

+

Erstellen Sie zuerst Dienststellen, um Plätze zuzuweisen.

+
+ {:else} +
+
+

+ Plätze pro Dienststelle +

+ +
+ +
+ + + + + + + + + {#each plaetze as platz} + + + + + {/each} + +
+ Dienststelle + + Verfügbare Plätze +
+ {platz.dienststelle.name} + + handlePlaetzeChange(platz.dienststelleId, e.currentTarget.value)} + class="w-24 border border-gray-300 rounded-md px-3 py-1 text-center focus:ring-blue-500 focus:border-blue-500 {aenderungen.has(platz.dienststelleId) ? 'bg-yellow-50 border-yellow-300' : ''}" + /> +
+
+
+ {/if} + + \ No newline at end of file diff --git a/src/routes/api/admin/zeitraum-plaetze/+server.ts b/src/routes/api/admin/zeitraum-plaetze/+server.ts new file mode 100644 index 0000000..c9768a4 --- /dev/null +++ b/src/routes/api/admin/zeitraum-plaetze/+server.ts @@ -0,0 +1,114 @@ +// src/routes/api/admin/zeitraum-plaetze/+server.ts +import { json } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; +import { PrismaClient } from '@prisma/client'; + +const prisma = new PrismaClient(); + +// GET: Plätze für einen bestimmten Zeitraum abrufen +export const GET: RequestHandler = async ({ url, cookies }) => { + const adminAuth = cookies.get('admin-auth'); + if (adminAuth !== 'authenticated') { + return json({ error: 'Nicht autorisiert' }, { status: 401 }); + } + + try { + const zeitraumId = url.searchParams.get('zeitraumId'); + + if (!zeitraumId) { + return json({ error: 'zeitraumId erforderlich' }, { status: 400 }); + } + + const plaetze = await prisma.zeitraumPlaetze.findMany({ + where: { zeitraumId: parseInt(zeitraumId) }, + include: { + dienststelle: true + }, + orderBy: { + dienststelle: { name: 'asc' } + } + }); + + return json(plaetze); + } catch (error) { + console.error('Fehler beim Laden der Plätze:', error); + return json({ error: 'Serverfehler' }, { status: 500 }); + } +}; + +// POST: Plätze für einen Zeitraum und Dienststelle aktualisieren +export const POST: RequestHandler = async ({ request, cookies }) => { + const adminAuth = cookies.get('admin-auth'); + if (adminAuth !== 'authenticated') { + return json({ error: 'Nicht autorisiert' }, { status: 401 }); + } + + try { + const { zeitraumId, dienststelleId, plaetze } = await request.json(); + + if (!zeitraumId || !dienststelleId || plaetze === undefined) { + return json({ error: 'Fehlende Parameter' }, { status: 400 }); + } + + const result = await prisma.zeitraumPlaetze.upsert({ + where: { + zeitraumId_dienststelleId: { + zeitraumId: parseInt(zeitraumId), + dienststelleId: parseInt(dienststelleId) + } + }, + update: { + plaetze: parseInt(plaetze) + }, + create: { + zeitraumId: parseInt(zeitraumId), + dienststelleId: parseInt(dienststelleId), + plaetze: parseInt(plaetze) + } + }); + + return json(result); + } catch (error) { + console.error('Fehler beim Speichern der Plätze:', error); + return json({ error: 'Serverfehler' }, { status: 500 }); + } +}; + +// PATCH: Synchronisiert ZeitraumPlaetze wenn neue Dienststellen oder Zeiträume hinzugefügt werden +export const PATCH: RequestHandler = async ({ cookies }) => { + const adminAuth = cookies.get('admin-auth'); + if (adminAuth !== 'authenticated') { + return json({ error: 'Nicht autorisiert' }, { status: 401 }); + } + + try { + // Alle Zeiträume und Dienststellen holen + const zeitraeume = await prisma.praktikumszeitraum.findMany(); + const dienststellen = await prisma.dienststelle.findMany(); + + // Für jede Kombination prüfen ob Eintrag existiert, sonst erstellen + for (const zeitraum of zeitraeume) { + for (const dienststelle of dienststellen) { + await prisma.zeitraumPlaetze.upsert({ + where: { + zeitraumId_dienststelleId: { + zeitraumId: zeitraum.id, + dienststelleId: dienststelle.id + } + }, + update: {}, // Nichts updaten wenn bereits vorhanden + create: { + zeitraumId: zeitraum.id, + dienststelleId: dienststelle.id, + plaetze: dienststelle.plaetze // Standardwert von Dienststelle übernehmen + } + }); + } + } + + return json({ success: true, message: 'Synchronisierung abgeschlossen' }); + } catch (error) { + console.error('Fehler bei der Synchronisierung:', error); + return json({ error: 'Serverfehler' }, { status: 500 }); + } +}; \ No newline at end of file diff --git a/src/routes/api/dienststellen/+server.ts b/src/routes/api/dienststellen/+server.ts index 23d234b..7590ac5 100644 --- a/src/routes/api/dienststellen/+server.ts +++ b/src/routes/api/dienststellen/+server.ts @@ -1,10 +1,17 @@ -import { PrismaClient } from '@prisma/client'; import { json } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; -const prisma = new PrismaClient(); +let prismaPromise: Promise | null = null; + +async function getPrismaClient() { + if (!prismaPromise) { + prismaPromise = import('@prisma/client').then(({ PrismaClient }) => new PrismaClient()); + } + return prismaPromise; +} export const GET: RequestHandler = async () => { + const prisma = await getPrismaClient(); // Hier Prisma Client holen const dienststellen = await prisma.dienststelle.findMany({ orderBy: { name: 'asc' } }); return json(dienststellen); }; \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index bbf8c7d..8a705be 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,5 +2,11 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()] -}); + plugins: [sveltekit()], + optimizeDeps: { + exclude: ['@prisma/client'] + }, + ssr: { + noExternal: process.env.NODE_ENV === 'production' ? ['@prisma/client'] : [], + } +}); \ No newline at end of file