Refactor file handling to prioritize internal data directories for backups and uploads; enhance error handling and logging for metadata and CSV operations.
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 47s

This commit is contained in:
Torsten Schulz (local)
2026-02-11 11:42:24 +01:00
parent 0fcf6ced0e
commit 0d533710cd
15 changed files with 225 additions and 127 deletions

View File

@@ -45,35 +45,49 @@ export default defineEventHandler(async (event) => {
}
}
const metadata = await readGalerieMetadata()
let metadata = []
try {
metadata = await readGalerieMetadata()
if (!Array.isArray(metadata)) {
console.warn('Galerie-Metadaten haben unerwartetes Format, verwende leere Liste')
metadata = []
}
} catch (e) {
console.error('Fehler beim Lesen der Galerie-Metadaten, liefere leeres Ergebnis:', e.message)
metadata = []
}
// Filtere Bilder basierend auf Sichtbarkeit
const visibleImages = metadata.filter(image => {
// Öffentliche Bilder sind für alle sichtbar
// Defensive checks
if (!image || typeof image !== 'object') return false
if (image.isPublic) return true
// Private Bilder nur für eingeloggte Mitglieder
return isLoggedIn
})
// Sortiere nach Upload-Datum (neueste zuerst)
visibleImages.sort((a, b) => new Date(b.uploadedAt) - new Date(a.uploadedAt))
// Sortiere nach Upload-Datum (neueste zuerst) - defensive
visibleImages.sort((a, b) => {
const ta = new Date(a.uploadedAt || 0).getTime()
const tb = new Date(b.uploadedAt || 0).getTime()
return tb - ta
})
// Pagination
const page = parseInt(getQuery(event).page) || 1
const perPage = 10
// Pagination (defensive defaults)
const page = Math.max(1, parseInt(getQuery(event).page) || 1)
const perPage = Math.max(1, parseInt(getQuery(event).perPage) || 10)
const start = (page - 1) * perPage
const end = start + perPage
const paginatedImages = visibleImages.slice(start, end)
const paginatedImages = visibleImages.slice(start, start + perPage)
// Konsistente Rückgabeform
return {
success: true,
images: paginatedImages.map(img => ({
id: img.id,
title: img.title,
description: img.description,
isPublic: img.isPublic,
uploadedAt: img.uploadedAt,
previewFilename: img.previewFilename
id: img.id || img.filename || null,
title: img.title || '',
description: img.description || '',
isPublic: !!img.isPublic,
uploadedAt: img.uploadedAt || null,
previewFilename: img.previewFilename || null
})),
pagination: {
page,