Files
SDSStundenerfassung/reset-db.js
Carsten Graf 17838c4f1e FirstCommit
2026-01-22 01:13:28 +01:00

208 lines
7.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const sqlite3 = require('sqlite3').verbose();
const bcrypt = require('bcryptjs');
const path = require('path');
const fs = require('fs');
const dbPath = path.join(__dirname, 'stundenerfassung.db');
console.log('🔄 Setze Datenbank zurück...\n');
// Datenbank schließen falls offen
let db = null;
try {
// Prüfe ob Datenbank existiert
if (fs.existsSync(dbPath)) {
console.log('📁 Datenbankdatei gefunden, lösche sie...');
fs.unlinkSync(dbPath);
console.log('✅ Datenbankdatei gelöscht\n');
} else {
console.log(' Datenbankdatei existiert nicht, erstelle neue...\n');
}
// Neue Datenbank erstellen
db = new sqlite3.Database(dbPath);
db.serialize(() => {
console.log('📊 Erstelle Tabellen...\n');
// Benutzer-Tabelle
db.run(`CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
firstname TEXT NOT NULL,
lastname TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'mitarbeiter',
last_week_start TEXT,
personalnummer TEXT,
wochenstunden REAL,
urlaubstage REAL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)`, (err) => {
if (err) console.error('Fehler bei users:', err);
else console.log('✅ Tabelle users erstellt');
});
// Stundenerfassung-Tabelle
db.run(`CREATE TABLE timesheet_entries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
date TEXT NOT NULL,
start_time TEXT,
end_time TEXT,
break_minutes INTEGER DEFAULT 0,
total_hours REAL,
notes TEXT,
activity1_desc TEXT,
activity1_hours REAL,
activity1_project_number TEXT,
activity2_desc TEXT,
activity2_hours REAL,
activity2_project_number TEXT,
activity3_desc TEXT,
activity3_hours REAL,
activity3_project_number TEXT,
activity4_desc TEXT,
activity4_hours REAL,
activity4_project_number TEXT,
activity5_desc TEXT,
activity5_hours REAL,
activity5_project_number TEXT,
overtime_taken_hours REAL,
vacation_type TEXT,
status TEXT DEFAULT 'offen',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
)`, (err) => {
if (err) console.error('Fehler bei timesheet_entries:', err);
else console.log('✅ Tabelle timesheet_entries erstellt');
});
// Wöchentliche Stundenzettel-Tabelle
db.run(`CREATE TABLE weekly_timesheets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
week_start TEXT NOT NULL,
week_end TEXT NOT NULL,
version INTEGER DEFAULT 1,
status TEXT DEFAULT 'eingereicht',
submitted_at DATETIME DEFAULT CURRENT_TIMESTAMP,
reviewed_by INTEGER,
reviewed_at DATETIME,
pdf_downloaded_at DATETIME,
pdf_downloaded_by INTEGER,
version_reason TEXT,
admin_comment TEXT,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (reviewed_by) REFERENCES users(id),
FOREIGN KEY (pdf_downloaded_by) REFERENCES users(id)
)`, (err) => {
if (err) console.error('Fehler bei weekly_timesheets:', err);
else console.log('✅ Tabelle weekly_timesheets erstellt');
});
// LDAP-Konfiguration-Tabelle
db.run(`CREATE TABLE ldap_config (
id INTEGER PRIMARY KEY AUTOINCREMENT,
enabled INTEGER DEFAULT 0,
url TEXT,
bind_dn TEXT,
bind_password TEXT,
base_dn TEXT,
user_search_filter TEXT,
username_attribute TEXT DEFAULT 'cn',
firstname_attribute TEXT DEFAULT 'givenName',
lastname_attribute TEXT DEFAULT 'sn',
sync_interval INTEGER DEFAULT 0,
last_sync DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)`, (err) => {
if (err) console.error('Fehler bei ldap_config:', err);
else console.log('✅ Tabelle ldap_config erstellt');
});
// LDAP-Sync-Log-Tabelle
db.run(`CREATE TABLE ldap_sync_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
sync_type TEXT NOT NULL,
status TEXT NOT NULL,
users_synced INTEGER DEFAULT 0,
error_message TEXT,
sync_started_at DATETIME DEFAULT CURRENT_TIMESTAMP,
sync_completed_at DATETIME
)`, (err) => {
if (err) console.error('Fehler bei ldap_sync_log:', err);
else console.log('✅ Tabelle ldap_sync_log erstellt');
});
// Warte bis alle Tabellen erstellt sind
db.run('SELECT 1', (err) => {
if (err) {
console.error('Fehler beim Warten:', err);
return;
}
console.log('\n👤 Erstelle Standard-Benutzer...\n');
// Standard Admin-Benutzer
const adminPassword = bcrypt.hashSync('admin123', 10);
db.run(`INSERT INTO users (id, username, password, firstname, lastname, role)
VALUES (1, 'admin', ?, 'System', 'Administrator', 'admin')`,
[adminPassword], (err) => {
if (err) console.error('Fehler beim Erstellen des Admin-Users:', err);
else console.log('✅ Admin-User erstellt (admin / admin123)');
});
// Standard Verwaltungs-Benutzer
const verwaltungPassword = bcrypt.hashSync('verwaltung123', 10);
db.run(`INSERT INTO users (id, username, password, firstname, lastname, role)
VALUES (2, 'verwaltung', ?, 'Verwaltung', 'User', 'verwaltung')`,
[verwaltungPassword], (err) => {
if (err) console.error('Fehler beim Erstellen des Verwaltungs-Users:', err);
else console.log('✅ Verwaltungs-User erstellt (verwaltung / verwaltung123)');
});
// Test-Mitarbeiter (optional)
const mitarbeiterPassword = bcrypt.hashSync('test123', 10);
db.run(`INSERT INTO users (id, username, password, firstname, lastname, role, wochenstunden, urlaubstage)
VALUES (3, 'test', ?, 'Test', 'Mitarbeiter', 'mitarbeiter', 40, 25)`,
[mitarbeiterPassword], (err) => {
if (err && !err.message.includes('UNIQUE constraint')) {
console.error('Fehler beim Erstellen des Test-Users:', err);
} else if (!err) {
console.log('✅ Test-Mitarbeiter erstellt (test / test123, 40h/Woche, 25 Urlaubstage)');
}
});
// Warte bis alle Benutzer erstellt sind
setTimeout(() => {
console.log('\n✨ Datenbank erfolgreich zurückgesetzt!\n');
console.log('📋 Standard-Zugangsdaten:');
console.log(' Admin: admin / admin123');
console.log(' Verwaltung: verwaltung / verwaltung123');
console.log(' Test-User: test / test123\n');
db.close((err) => {
if (err) {
console.error('Fehler beim Schließen der Datenbank:', err);
process.exit(1);
} else {
console.log('✅ Datenbank geschlossen\n');
process.exit(0);
}
});
}, 500);
});
});
} catch (error) {
console.error('❌ Fehler beim Zurücksetzen der Datenbank:', error);
if (db) {
db.close();
}
process.exit(1);
}