pdf hochladen und Anmeldungen loeschen
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user