Add config system for training, trainer, membership and impressum with CMS editor
This commit is contained in:
30
server/api/config.get.js
Normal file
30
server/api/config.get.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import { promises as fs } from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
const configFile = getDataPath('config.json')
|
||||
const data = await fs.readFile(configFile, 'utf-8')
|
||||
const config = JSON.parse(data)
|
||||
|
||||
return {
|
||||
success: true,
|
||||
config
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Laden der Config:', error)
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
message: 'Fehler beim Laden der Konfiguration.'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
64
server/api/config.put.js
Normal file
64
server/api/config.put.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import { verifyToken, getUserById } from '../utils/auth.js'
|
||||
import { promises as fs } from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
const token = getCookie(event, 'auth_token')
|
||||
|
||||
if (!token) {
|
||||
throw createError({
|
||||
statusCode: 401,
|
||||
message: 'Nicht authentifiziert.'
|
||||
})
|
||||
}
|
||||
|
||||
const decoded = verifyToken(token)
|
||||
|
||||
if (!decoded) {
|
||||
throw createError({
|
||||
statusCode: 401,
|
||||
message: 'Ungültiges Token.'
|
||||
})
|
||||
}
|
||||
|
||||
const user = await getUserById(decoded.id)
|
||||
|
||||
// Only admin and vorstand can edit config
|
||||
if (!user || (user.role !== 'admin' && user.role !== 'vorstand')) {
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
message: 'Keine Berechtigung zum Bearbeiten der Konfiguration.'
|
||||
})
|
||||
}
|
||||
|
||||
const body = await readBody(event)
|
||||
|
||||
if (!body.config) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Konfigurationsdaten fehlen.'
|
||||
})
|
||||
}
|
||||
|
||||
const configFile = getDataPath('config.json')
|
||||
await fs.writeFile(configFile, JSON.stringify(body.config, null, 2), 'utf-8')
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Konfiguration erfolgreich gespeichert.'
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Speichern der Config:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
150
server/data/config.json
Normal file
150
server/data/config.json
Normal file
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"training": {
|
||||
"ort": {
|
||||
"name": "Sporthalle der Grundschule Harheim",
|
||||
"strasse": "In den Schafgärten 25",
|
||||
"plz": "60437",
|
||||
"ort": "Frankfurt am Main"
|
||||
},
|
||||
"zeiten": [
|
||||
{
|
||||
"id": "1",
|
||||
"tag": "Dienstag",
|
||||
"von": "17:30",
|
||||
"bis": "19:30",
|
||||
"gruppe": "Schüler/Jugend (ab 6 Jahre)"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"tag": "Dienstag",
|
||||
"von": "19:30",
|
||||
"bis": "22:30",
|
||||
"gruppe": "Damen und Herren"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"tag": "Donnerstag",
|
||||
"von": "19:30",
|
||||
"bis": "22:30",
|
||||
"gruppe": "Damen und Herren"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trainer": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "Torsten Schulz",
|
||||
"lizenz": "C-Trainer",
|
||||
"schwerpunkt": "Nachwuchsförderung",
|
||||
"zusatz": "Erwachsenen bei Wunsch zur Verfügung"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Thomas Steinbrech",
|
||||
"lizenz": "Kindertrainer",
|
||||
"schwerpunkt": "Nachwuchsförderung",
|
||||
"zusatz": ""
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "Magda Schwallbach",
|
||||
"lizenz": "Assistenztrainerin",
|
||||
"schwerpunkt": "Unterstützung & Betreuung",
|
||||
"zusatz": ""
|
||||
}
|
||||
],
|
||||
"mitgliedschaft": [
|
||||
{
|
||||
"id": "1",
|
||||
"typ": "Erwachsene",
|
||||
"preis": 120,
|
||||
"features": [
|
||||
"Unbegrenztes Training",
|
||||
"Teilnahme am Punktspielbetrieb"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"typ": "Kinder/Jugend",
|
||||
"beschreibung": "Bis 18 Jahre",
|
||||
"preis": 72,
|
||||
"features": [
|
||||
"Unbegrenztes Training",
|
||||
"Jugendförderung"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"typ": "Passiv",
|
||||
"beschreibung": "Unterstützen Sie Ihren Lieblingsverein",
|
||||
"preis": 30,
|
||||
"features": [
|
||||
"Unterstützung des Vereins"
|
||||
]
|
||||
}
|
||||
],
|
||||
"vorstand": {
|
||||
"vorsitzender": {
|
||||
"vorname": "Jürgen",
|
||||
"nachname": "Dichmann",
|
||||
"strasse": "",
|
||||
"plz": "",
|
||||
"ort": "",
|
||||
"telefon": "069 509637",
|
||||
"email": "j.dichmann@gmx.de"
|
||||
},
|
||||
"stellvertreter": {
|
||||
"vorname": "",
|
||||
"nachname": "",
|
||||
"strasse": "",
|
||||
"plz": "",
|
||||
"ort": "",
|
||||
"telefon": "",
|
||||
"email": ""
|
||||
},
|
||||
"kassenwart": {
|
||||
"vorname": "",
|
||||
"nachname": "",
|
||||
"strasse": "",
|
||||
"plz": "",
|
||||
"ort": "",
|
||||
"telefon": "",
|
||||
"email": ""
|
||||
},
|
||||
"schriftfuehrer": {
|
||||
"vorname": "",
|
||||
"nachname": "",
|
||||
"strasse": "",
|
||||
"plz": "",
|
||||
"ort": "",
|
||||
"telefon": "",
|
||||
"email": ""
|
||||
},
|
||||
"sportwart": {
|
||||
"vorname": "",
|
||||
"nachname": "",
|
||||
"strasse": "",
|
||||
"plz": "",
|
||||
"ort": "",
|
||||
"telefon": "",
|
||||
"email": ""
|
||||
},
|
||||
"jugendwart": {
|
||||
"vorname": "",
|
||||
"nachname": "",
|
||||
"strasse": "",
|
||||
"plz": "",
|
||||
"ort": "",
|
||||
"telefon": "",
|
||||
"email": ""
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"verantwortlicher": {
|
||||
"vorname": "Torsten",
|
||||
"nachname": "Schulz",
|
||||
"email": "tsschulz@tsschulz.de"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user