import fs from 'fs/promises' import path from 'path' import { getUserFromToken, verifyToken } from '../../utils/auth.js' // Handle both dev and production paths const getDataPath = (filename) => { const cwd = process.cwd() if (cwd.endsWith('.output')) { return path.join(cwd, '../server/data', filename) } return path.join(cwd, 'server/data', filename) } const GALERIE_DIR = getDataPath('galerie') const GALERIE_METADATA = getDataPath('galerie-metadata.json') async function readGalerieMetadata() { try { const data = await fs.readFile(GALERIE_METADATA, 'utf-8') return JSON.parse(data) } catch (error) { if (error.code === 'ENOENT') { return [] } throw error } } async function writeGalerieMetadata(metadata) { await fs.writeFile(GALERIE_METADATA, JSON.stringify(metadata, null, 2), 'utf-8') } export default defineEventHandler(async (event) => { try { // Authentifizierung prüfen const token = getCookie(event, 'auth_token') || getHeader(event, 'authorization')?.replace('Bearer ', '') if (!token) { throw createError({ statusCode: 401, statusMessage: 'Nicht authentifiziert' }) } const decoded = verifyToken(token) if (!decoded) { throw createError({ statusCode: 401, statusMessage: 'Ungültiges Token' }) } const user = await getUserFromToken(token) if (!user || (user.role !== 'admin' && user.role !== 'vorstand')) { throw createError({ statusCode: 403, statusMessage: 'Keine Berechtigung zum Löschen von Bildern' }) } const imageId = getRouterParam(event, 'id') if (!imageId) { throw createError({ statusCode: 400, statusMessage: 'Bild-ID erforderlich' }) } const metadata = await readGalerieMetadata() const image = metadata.find(img => img.id === imageId) if (!image) { throw createError({ statusCode: 404, statusMessage: 'Bild nicht gefunden' }) } // Lösche Dateien const originalPath = path.join(GALERIE_DIR, 'originals', image.filename) const previewPath = path.join(GALERIE_DIR, 'previews', image.previewFilename) try { await fs.unlink(originalPath) } catch (error) { console.warn('Original-Datei konnte nicht gelöscht werden:', error) } try { await fs.unlink(previewPath) } catch (error) { console.warn('Preview-Datei konnte nicht gelöscht werden:', error) } // Entferne aus Metadaten const updatedMetadata = metadata.filter(img => img.id !== imageId) await writeGalerieMetadata(updatedMetadata) return { success: true, message: 'Bild erfolgreich gelöscht' } } catch (error) { console.error('Fehler beim Löschen des Bildes:', error) if (error.statusCode) { throw error } throw createError({ statusCode: 500, statusMessage: 'Fehler beim Löschen des Bildes' }) } })