pdf hochladen und Anmeldungen loeschen

This commit is contained in:
titver968
2025-04-24 16:41:56 +02:00
parent e3c8dff646
commit 063f7f433c
11 changed files with 247 additions and 52 deletions

View File

@@ -1,43 +1,61 @@
import { PrismaClient } from '@prisma/client';
import { json, type RequestHandler } from '@sveltejs/kit';
import { Prisma } from '@prisma/client';
import { writeFile } from 'fs/promises';
import { randomUUID } from 'crypto';
import { json } from '@sveltejs/kit';
const prisma = new PrismaClient();
export const POST: RequestHandler = async ({ request }) => {
const data = await request.json();
export async function POST({ request }) {
const formData = await request.formData();
const get = (key: string) => formData.get(key)?.toString() ?? '';
const pdfs = formData.getAll('pdfs') as File[];
const gespeichertePfade: string[] = [];
for (const pdf of pdfs) {
if (pdf.size > 0 && pdf.type === 'application/pdf') {
const buffer = Buffer.from(await pdf.arrayBuffer());
const dateiname = `${randomUUID()}.pdf`;
const pfad = `/uploads/${dateiname}`;
await writeFile(`static${pfad}`, buffer);
gespeichertePfade.push(pfad);
}
}
try {
await prisma.anmeldung.create({
data: {
anrede: data.anrede,
vorname: data.vorname,
nachname: data.nachname,
geburtsdatum: data.geburtsdatum,
strasse: data.strasse,
hausnummer: data.hausnummer,
ort: data.ort,
plz: data.plz,
telefon: data.telefon,
email: data.email,
schulart: data.schulart,
zeitraum: data.zeitraum,
motivation: data.motivation,
wunsch1Id: data.wunsch1Id,
wunsch2Id: data.wunsch2Id,
wunsch3Id: data.wunsch3Id
anrede: get('anrede'),
vorname: get('vorname'),
nachname: get('nachname'),
geburtsdatum: get('geburtsdatum'),
strasse: get('strasse'),
hausnummer: get('hausnummer'),
ort: get('ort'),
plz: get('plz'),
telefon: get('telefon'),
email: get('email'),
schulart: get('schulart'),
zeitraum: get('zeitraum'),
motivation: get('motivation'),
wunsch1Id: parseInt(get('wunsch1Id')),
wunsch2Id: parseInt(get('wunsch2Id')),
wunsch3Id: parseInt(get('wunsch3Id')),
pdfs: {
create: gespeichertePfade.map((pfad) => ({ pfad }))
}
}
});
return json({ success: true });
} catch (error) {
if (error instanceof Prisma.PrismaClientKnownRequestError) {
if (error.code === 'P2002') {
// Eindeutigkeit verletzt
return json({ error: 'Diese E-Mail-Adresse wurde bereits verwendet.' }, { status: 400 });
}
} catch (err: unknown) {
if (err instanceof Error && (err as { code?: string }).code === 'P2002') {
return json({ error: 'Diese E-Mail wurde bereits verwendet.' }, { status: 400 });
}
console.error(error);
return json({ error: 'Ein Fehler ist aufgetreten.' }, { status: 500 });
console.error(err);
return json({ error: 'Fehler beim Speichern.' }, { status: 500 });
}
};
}