praktikum, Notfallkontakt und ein Platz pro Dienstelle bei neuer Zeitraum
This commit is contained in:
@@ -5,137 +5,143 @@ import { prisma } from '$lib/prisma';
|
||||
|
||||
// Hilfsfunktion: Erstelle ZeitraumPlaetze-Einträge für einen neuen Zeitraum
|
||||
async function createZeitraumPlaetzeForZeitraum(zeitraumId: number) {
|
||||
const dienststellen = await prisma.dienststelle.findMany();
|
||||
|
||||
// Erstelle für jede existierende Dienststelle einen Eintrag mit 0 Plätzen
|
||||
for (const dienststelle of dienststellen) {
|
||||
await prisma.zeitraumPlaetze.create({
|
||||
data: {
|
||||
zeitraumId: zeitraumId,
|
||||
dienststelleId: dienststelle.id,
|
||||
plaetze: 0 // Standardwert: 0 Plätze
|
||||
}
|
||||
});
|
||||
}
|
||||
const dienststellen = await prisma.dienststelle.findMany();
|
||||
|
||||
// Erstelle für jede existierende Dienststelle einen Eintrag mit 1 Platz
|
||||
for (const dienststelle of dienststellen) {
|
||||
await prisma.zeitraumPlaetze.create({
|
||||
data: {
|
||||
zeitraumId: zeitraumId,
|
||||
dienststelleId: dienststelle.id,
|
||||
plaetze: 1 // Standardwert: 1 Platz pro Dienststelle
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const GET: RequestHandler = async ({ cookies }) => {
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
|
||||
try {
|
||||
const zeitraeume = await prisma.praktikumszeitraum.findMany({
|
||||
orderBy: { startDatum: 'desc' }
|
||||
});
|
||||
return json(zeitraeume);
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Laden der Zeiträume:', error);
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
try {
|
||||
const zeitraeume = await prisma.praktikumszeitraum.findMany({
|
||||
orderBy: { startDatum: 'desc' }
|
||||
});
|
||||
return json(zeitraeume);
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Laden der Zeiträume:', error);
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
|
||||
export const POST: RequestHandler = async ({ request, cookies }) => {
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
|
||||
try {
|
||||
const { bezeichnung, startDatum, endDatum } = await request.json();
|
||||
try {
|
||||
const { bezeichnung, startDatum, endDatum } = await request.json();
|
||||
|
||||
if (!bezeichnung || !startDatum || !endDatum) {
|
||||
return json({ error: 'Alle Felder sind erforderlich' }, { status: 400 });
|
||||
}
|
||||
if (!bezeichnung || !startDatum || !endDatum) {
|
||||
return json({ error: 'Alle Felder sind erforderlich' }, { status: 400 });
|
||||
}
|
||||
|
||||
const start = new Date(startDatum);
|
||||
const end = new Date(endDatum);
|
||||
const start = new Date(startDatum);
|
||||
const end = new Date(endDatum);
|
||||
|
||||
if (end <= start) {
|
||||
return json({ error: 'Enddatum muss nach dem Startdatum liegen' }, { status: 400 });
|
||||
}
|
||||
if (end <= start) {
|
||||
return json({ error: 'Enddatum muss nach dem Startdatum liegen' }, { status: 400 });
|
||||
}
|
||||
|
||||
const zeitraum = await prisma.praktikumszeitraum.create({
|
||||
data: {
|
||||
bezeichnung,
|
||||
startDatum: start,
|
||||
endDatum: end
|
||||
}
|
||||
});
|
||||
const zeitraum = await prisma.praktikumszeitraum.create({
|
||||
data: {
|
||||
bezeichnung,
|
||||
startDatum: start,
|
||||
endDatum: end
|
||||
}
|
||||
});
|
||||
|
||||
// Automatisch ZeitraumPlaetze für alle existierenden Dienststellen erstellen
|
||||
await createZeitraumPlaetzeForZeitraum(zeitraum.id);
|
||||
// Automatisch ZeitraumPlaetze für alle existierenden Dienststellen erstellen (mit 1 Platz)
|
||||
await createZeitraumPlaetzeForZeitraum(zeitraum.id);
|
||||
|
||||
return json(zeitraum);
|
||||
} catch (error: any) {
|
||||
console.error('Fehler beim Erstellen des Zeitraums:', error);
|
||||
if (error.code === 'P2002') {
|
||||
return json({ error: 'Ein Zeitraum mit dieser Bezeichnung existiert bereits' }, { status: 400 });
|
||||
}
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
return json(zeitraum);
|
||||
} catch (error: any) {
|
||||
console.error('Fehler beim Erstellen des Zeitraums:', error);
|
||||
if (error.code === 'P2002') {
|
||||
return json(
|
||||
{ error: 'Ein Zeitraum mit dieser Bezeichnung existiert bereits' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
|
||||
export const PATCH: RequestHandler = async ({ request, cookies }) => {
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
|
||||
try {
|
||||
const { id, bezeichnung, startDatum, endDatum } = await request.json();
|
||||
try {
|
||||
const { id, bezeichnung, startDatum, endDatum } = await request.json();
|
||||
|
||||
if (!id || !bezeichnung || !startDatum || !endDatum) {
|
||||
return json({ error: 'Alle Felder sind erforderlich' }, { status: 400 });
|
||||
}
|
||||
if (!id || !bezeichnung || !startDatum || !endDatum) {
|
||||
return json({ error: 'Alle Felder sind erforderlich' }, { status: 400 });
|
||||
}
|
||||
|
||||
const start = new Date(startDatum);
|
||||
const end = new Date(endDatum);
|
||||
const start = new Date(startDatum);
|
||||
const end = new Date(endDatum);
|
||||
|
||||
if (end <= start) {
|
||||
return json({ error: 'Enddatum muss nach dem Startdatum liegen' }, { status: 400 });
|
||||
}
|
||||
if (end <= start) {
|
||||
return json({ error: 'Enddatum muss nach dem Startdatum liegen' }, { status: 400 });
|
||||
}
|
||||
|
||||
const zeitraum = await prisma.praktikumszeitraum.update({
|
||||
where: { id: parseInt(id) },
|
||||
data: {
|
||||
bezeichnung,
|
||||
startDatum: start,
|
||||
endDatum: end
|
||||
}
|
||||
});
|
||||
const zeitraum = await prisma.praktikumszeitraum.update({
|
||||
where: { id: parseInt(id) },
|
||||
data: {
|
||||
bezeichnung,
|
||||
startDatum: start,
|
||||
endDatum: end
|
||||
}
|
||||
});
|
||||
|
||||
return json(zeitraum);
|
||||
} catch (error: any) {
|
||||
console.error('Fehler beim Aktualisieren des Zeitraums:', error);
|
||||
if (error.code === 'P2002') {
|
||||
return json({ error: 'Ein Zeitraum mit dieser Bezeichnung existiert bereits' }, { status: 400 });
|
||||
}
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
return json(zeitraum);
|
||||
} catch (error: any) {
|
||||
console.error('Fehler beim Aktualisieren des Zeitraums:', error);
|
||||
if (error.code === 'P2002') {
|
||||
return json(
|
||||
{ error: 'Ein Zeitraum mit dieser Bezeichnung existiert bereits' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
|
||||
export const DELETE: RequestHandler = async ({ url, cookies }) => {
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
const adminAuth = cookies.get('admin-auth');
|
||||
if (adminAuth !== 'authenticated') {
|
||||
return json({ error: 'Nicht autorisiert' }, { status: 401 });
|
||||
}
|
||||
|
||||
try {
|
||||
const id = url.searchParams.get('id');
|
||||
if (!id) {
|
||||
return json({ error: 'ID erforderlich' }, { status: 400 });
|
||||
}
|
||||
try {
|
||||
const id = url.searchParams.get('id');
|
||||
if (!id) {
|
||||
return json({ error: 'ID erforderlich' }, { status: 400 });
|
||||
}
|
||||
|
||||
// ZeitraumPlaetze werden automatisch durch onDelete: Cascade gelöscht
|
||||
await prisma.praktikumszeitraum.delete({
|
||||
where: { id: parseInt(id) }
|
||||
});
|
||||
// ZeitraumPlaetze werden automatisch durch onDelete: Cascade gelöscht
|
||||
await prisma.praktikumszeitraum.delete({
|
||||
where: { id: parseInt(id) }
|
||||
});
|
||||
|
||||
return json({ success: true });
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Löschen des Zeitraums:', error);
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
return json({ success: true });
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Löschen des Zeitraums:', error);
|
||||
return json({ error: 'Serverfehler' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user