Add smart member list with manual+login merge and duplicate detection
This commit is contained in:
97
server/utils/members.js
Normal file
97
server/utils/members.js
Normal file
@@ -0,0 +1,97 @@
|
||||
import { promises as fs } from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
// 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
|
||||
const newMember = {
|
||||
id: `m${Date.now()}`,
|
||||
...memberData
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user