58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
#!/usr/bin/env node
|
|
// Script to split name field in membership application JSON files under server/data/membership-applications/
|
|
// It will create backups for each modified file.
|
|
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
|
|
const APPS_DIR = path.join(__dirname, '../server/data/membership-applications')
|
|
|
|
function extractNames(name) {
|
|
if (!name || typeof name !== 'string') return { firstName: '', lastName: '' }
|
|
const parts = name.trim().split(/\s+/)
|
|
if (parts.length === 1) return { firstName: parts[0], lastName: '' }
|
|
return { firstName: parts[0], lastName: parts.slice(1).join(' ') }
|
|
}
|
|
|
|
function main() {
|
|
if (!fs.existsSync(APPS_DIR)) {
|
|
console.error('membership-applications Verzeichnis nicht gefunden:', APPS_DIR)
|
|
process.exit(1)
|
|
}
|
|
|
|
const files = fs.readdirSync(APPS_DIR).filter(f => f.endsWith('.json'))
|
|
if (files.length === 0) {
|
|
console.log('Keine Bewerbungsdateien gefunden.')
|
|
return
|
|
}
|
|
|
|
let modified = 0
|
|
for (const file of files) {
|
|
const p = path.join(APPS_DIR, file)
|
|
let data
|
|
try {
|
|
data = JSON.parse(fs.readFileSync(p, 'utf8'))
|
|
} catch (err) {
|
|
console.error('Fehler beim Lesen von', p, err.message)
|
|
continue
|
|
}
|
|
|
|
if ((!data.firstName || !data.lastName) && data.name) {
|
|
const { firstName, lastName } = extractNames(data.name)
|
|
data.firstName = data.firstName || firstName
|
|
data.lastName = data.lastName || lastName
|
|
|
|
// Backup
|
|
const backup = p + '.bak'
|
|
fs.copyFileSync(p, backup)
|
|
fs.writeFileSync(p, JSON.stringify(data, null, 2))
|
|
modified++
|
|
console.log('Updated', p, '-> backup at', backup)
|
|
}
|
|
}
|
|
|
|
console.log('Done. Modified files:', modified)
|
|
}
|
|
|
|
main()
|