import multer from 'multer' import fs from 'fs/promises' import path from 'path' // Handle both dev and production paths const getDataPath = (filename) => { const cwd = process.cwd() // In production (.output/server), working dir is .output if (cwd.endsWith('.output')) { return path.join(cwd, '../server/data', filename) } // In development, working dir is project root return path.join(cwd, 'server/data', filename) } // Multer-Konfiguration für PDF-Uploads const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, 'public/documents/') }, filename: (req, file, cb) => { cb(null, 'satzung.pdf') } }) const upload = multer({ 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) => { if (event.method !== 'POST') { throw createError({ statusCode: 405, statusMessage: 'Method Not Allowed' }) } try { // Multer-Middleware für File-Upload 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 if (!file) { throw createError({ statusCode: 400, statusMessage: 'Keine PDF-Datei hochgeladen' }) } // Für jetzt: Satzungsinhalt als Platzhalter bis PDF-Parsing implementiert ist const htmlContent = `
Der Verein führt den Namen "Harheimer Tischtennis-Club" und hat seinen Sitz in Harheim.
Der Verein verfolgt ausschließlich und unmittelbar gemeinnützige Zwecke im Sinne des Abschnitts "Steuerbegünstigte Zwecke" der Abgabenordnung.
Mitglied des Vereins kann jede natürliche Person werden, die die Ziele des Vereins unterstützt.
Die Mitglieder zahlen Beiträge nach Maßgabe der Beitragsordnung.
Der Vorstand besteht aus dem Vorsitzenden, dem stellvertretenden Vorsitzenden, dem Kassenwart und dem Schriftführer.
Hinweis: Dies ist ein Platzhalter-Inhalt. Der vollständige Satzungstext wird automatisch aus der hochgeladenen PDF-Datei extrahiert, sobald das PDF-Parsing implementiert ist.
` // Config aktualisieren const configPath = getDataPath('config.json') const configData = JSON.parse(await fs.readFile(configPath, 'utf-8')) configData.seiten.satzung = { pdfUrl: '/documents/satzung.pdf', content: htmlContent } await fs.writeFile(configPath, JSON.stringify(configData, null, 2)) return { success: true, message: 'Satzung erfolgreich hochgeladen und verarbeitet', pdfUrl: '/documents/satzung.pdf' } } catch (error) { console.error('PDF Upload Error:', error) throw createError({ statusCode: 500, statusMessage: error.message || 'Fehler beim Verarbeiten der PDF-Datei' }) } }) // TODO: PDF-Parsing-Funktion später implementieren // function convertTextToHtml(text) { // // Einfache Text-zu-HTML-Konvertierung // let html = text // .replace(/\n\n+/g, '') // Absätze
// .replace(/\n/g, '
') // Zeilenumbrüche
// .replace(/^(.+)$/gm, '
$1
') // Alle Zeilen in Paragraphen // // // Überschriften erkennen (einfache Heuristik) // html = html.replace(/(§\s*\d+.*?)<\/p>/g, '
(\d+\.\s+.*?)<\/p>/g, '