import multer from 'multer' import fs from 'fs/promises' import path from 'path' // Multer-Konfiguration für PDF-Uploads const storage = multer.diskStorage({ destination: (req, file, cb) => { const uploadPath = path.join(process.cwd(), 'public', 'documents', 'spielplaene') cb(null, uploadPath) }, filename: (req, file, cb) => { const type = req.body.type const filename = `spielplan_${type}.pdf` cb(null, filename) } }) const upload = multer({ storage: storage, fileFilter: (req, file, cb) => { if (file.mimetype === 'application/pdf') { cb(null, true) } else { cb(new Error('Nur PDF-Dateien sind erlaubt'), false) } }, limits: { fileSize: 10 * 1024 * 1024 // 10MB Limit } }) export default defineEventHandler(async (event) => { try { // Prüfe Authentifizierung const authHeader = getHeader(event, 'authorization') if (!authHeader || !authHeader.startsWith('Bearer ')) { throw createError({ statusCode: 401, statusMessage: 'Nicht autorisiert' }) } // Multer-Middleware für multipart/form-data await new Promise((resolve, reject) => { upload.single('pdf')(event.node.req, event.node.res, (err) => { if (err) { reject(err) } else { resolve() } }) }) const file = event.node.req.file const type = event.node.req.body.type if (!file) { throw createError({ statusCode: 400, statusMessage: 'Keine Datei hochgeladen' }) } if (!type || !['gesamt', 'erwachsene', 'nachwuchs'].includes(type)) { // Lösche die hochgeladene Datei await fs.unlink(file.path) throw createError({ statusCode: 400, statusMessage: 'Ungültiger Typ' }) } return { success: true, message: `PDF für ${type} erfolgreich hochgeladen`, filename: file.filename, originalName: file.originalname } } catch (error) { console.error('Fehler beim PDF-Upload:', error) if (error.code === 'LIMIT_FILE_SIZE') { throw createError({ statusCode: 413, statusMessage: 'Datei zu groß (max. 10MB)' }) } if (error.message === 'Nur PDF-Dateien sind erlaubt') { throw createError({ statusCode: 400, statusMessage: 'Nur PDF-Dateien sind erlaubt' }) } throw createError({ statusCode: 500, statusMessage: 'Fehler beim Hochladen der PDF-Datei' }) } })