From 1ea7f7a63fbef80f9a35d07a7db71492dcb8c70d Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Fri, 22 May 2026 13:54:02 +0200 Subject: [PATCH] refactor(vereinsmeisterschaften): streamline file existence check and improve error handling --- server/api/vereinsmeisterschaften.get.js | 51 ++++++++++++++++-------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/server/api/vereinsmeisterschaften.get.js b/server/api/vereinsmeisterschaften.get.js index 0639f17..d633887 100644 --- a/server/api/vereinsmeisterschaften.get.js +++ b/server/api/vereinsmeisterschaften.get.js @@ -1,24 +1,46 @@ import { promises as fs } from 'fs' import path from 'path' +async function exists(filePath) { + try { + await fs.access(filePath) + return true + } catch { + return false + } +} + export default defineEventHandler(async (event) => { try { const cwd = process.cwd() - // Prefer internal server/data, fallback to public/data - let csvPath - if (cwd.endsWith('.output')) { - csvPath = path.join(cwd, '../server/data/vereinsmeisterschaften.csv') - if (!(await fs.access(csvPath).then(()=>true).catch(()=>false))) { - csvPath = path.join(cwd, '../public/data/vereinsmeisterschaften.csv') - } - } else { - csvPath = path.join(cwd, 'server/data/vereinsmeisterschaften.csv') - if (!(await fs.access(csvPath).then(()=>true).catch(()=>false))) { - csvPath = path.join(cwd, 'public/data/vereinsmeisterschaften.csv') + // Prefer CMS write target first (server/data/public-data), then legacy locations. + const candidates = [ + path.join(cwd, 'server/data/public-data/vereinsmeisterschaften.csv'), + path.join(cwd, '../server/data/public-data/vereinsmeisterschaften.csv'), + path.join(cwd, '.output/server/data/vereinsmeisterschaften.csv'), + path.join(cwd, 'server/data/vereinsmeisterschaften.csv'), + path.join(cwd, '.output/public/data/vereinsmeisterschaften.csv'), + path.join(cwd, 'public/data/vereinsmeisterschaften.csv'), + path.join(cwd, '../.output/public/data/vereinsmeisterschaften.csv'), + path.join(cwd, '../public/data/vereinsmeisterschaften.csv') + ] + + let csvPath = null + for (const candidate of candidates) { + if (await exists(candidate)) { + csvPath = candidate + break } } + if (!csvPath) { + throw createError({ + statusCode: 404, + statusMessage: 'Vereinsmeisterschaften-Datei nicht gefunden' + }) + } + // CSV-Datei direkt als Text zurückgeben (keine Caching-Probleme) const csv = await fs.readFile(csvPath, 'utf-8') @@ -30,12 +52,7 @@ export default defineEventHandler(async (event) => { return csv } catch (error) { - if (error.code === 'ENOENT') { - throw createError({ - statusCode: 404, - statusMessage: 'Vereinsmeisterschaften-Datei nicht gefunden' - }) - } + if (error?.statusCode) throw error console.error('Fehler beim Laden der Vereinsmeisterschaften:', error) throw createError({ statusCode: 500,