Add 'Spielplan' links to Navigation component; update index page to include 'Spielplan' section; enhance 'spielplaene' page with filtering, loading states, and error handling for improved user experience.
This commit is contained in:
61
server/api/spielplan.get.js
Normal file
61
server/api/spielplan.get.js
Normal file
@@ -0,0 +1,61 @@
|
||||
import fs from 'fs/promises'
|
||||
import path from 'path'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
const filePath = path.join(process.cwd(), 'public', 'data', 'spielplan.csv')
|
||||
|
||||
// Prüfe ob Datei existiert
|
||||
try {
|
||||
await fs.access(filePath)
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
message: 'Spielplan-Datei nicht gefunden',
|
||||
data: []
|
||||
}
|
||||
}
|
||||
|
||||
// CSV-Datei lesen
|
||||
const csvContent = await fs.readFile(filePath, 'utf-8')
|
||||
const lines = csvContent.split('\n').filter(line => line.trim() !== '')
|
||||
|
||||
if (lines.length < 2) {
|
||||
return {
|
||||
success: false,
|
||||
message: 'Spielplan-Datei ist leer oder unvollständig',
|
||||
data: []
|
||||
}
|
||||
}
|
||||
|
||||
// Header-Zeile parsen
|
||||
const headers = lines[0].split(';').map(header => header.trim())
|
||||
|
||||
// Datenzeilen parsen
|
||||
const data = lines.slice(1).map(line => {
|
||||
const values = line.split(';').map(value => value.trim())
|
||||
const row = {}
|
||||
|
||||
headers.forEach((header, index) => {
|
||||
row[header] = values[index] || ''
|
||||
})
|
||||
|
||||
return row
|
||||
})
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Spielplan erfolgreich geladen',
|
||||
data: data,
|
||||
headers: headers
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Laden des Spielplans:', error)
|
||||
return {
|
||||
success: false,
|
||||
message: 'Fehler beim Laden des Spielplans',
|
||||
data: []
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user