import { promises as fs } from 'fs' import path from 'path' import { randomUUID } from 'crypto' // Handle both dev and production paths const getDataPath = (filename) => { const cwd = process.cwd() // In production (.output/server), working dir is .output if (cwd.endsWith('.output')) { return path.join(cwd, '../server/data', filename) } // In development, working dir is project root return path.join(cwd, 'server/data', filename) } const MEMBERS_FILE = getDataPath('members.json') const USERS_FILE = getDataPath('users.json') // Read manual members from file export async function readMembers() { try { const data = await fs.readFile(MEMBERS_FILE, 'utf-8') return JSON.parse(data) } catch (error) { if (error.code === 'ENOENT') { return [] } console.error('Fehler beim Lesen der Mitgliederdaten:', error) return [] } } // Write manual members to file export async function writeMembers(members) { try { await fs.writeFile(MEMBERS_FILE, JSON.stringify(members, null, 2), 'utf-8') return true } catch (error) { console.error('Fehler beim Schreiben der Mitgliederdaten:', error) return false } } // Read registered users from file export async function readUsers() { try { const data = await fs.readFile(USERS_FILE, 'utf-8') return JSON.parse(data) } catch (error) { if (error.code === 'ENOENT') { return [] } console.error('Fehler beim Lesen der Benutzerdaten:', error) return [] } } // Get member by ID export async function getMemberById(id) { const members = await readMembers() return members.find(m => m.id === id) } // Add or update manual member export async function saveMember(memberData) { const members = await readMembers() if (memberData.id) { // Update existing const index = members.findIndex(m => m.id === memberData.id) if (index !== -1) { members[index] = { ...members[index], ...memberData } } else { throw new Error('Mitglied nicht gefunden') } } else { // Add new - use UUID for guaranteed uniqueness const newMember = { ...memberData, id: randomUUID() // Cryptographically secure unique ID } members.push(newMember) } await writeMembers(members) return true } // Delete manual member export async function deleteMember(id) { const members = await readMembers() const filtered = members.filter(m => m.id !== id) await writeMembers(filtered) return true }