Vertragsverwaltung_Plusfit24/routes/users.js
2026-02-10 15:29:29 +00:00

174 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

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 express = require('express');
const Database = require('better-sqlite3');
const auth = require('../middleware/authMiddleware');
const { encrypt, decrypt } = require('../utils/crypto');
const generateVertragsnummer = require('../utils/vertragsnummer');
const db = new Database('plusfit.db');
const router = express.Router();
/* =========================
Dashboard
========================= */
router.get('/dashboard', auth, (req, res) => {
res.render('dashboard');
});
/* =========================
User anlegen Formular
========================= */
router.get('/create', auth, (req, res) => {
res.render('createUser');
});
/* =========================
User anlegen SPEICHERN
========================= */
router.post('/create', auth, (req, res) => {
const u = req.body;
const vertragsnummer = generateVertragsnummer();
const iban = encrypt(u.iban);
const bic = encrypt(u.bic);
const widerrufBis = new Date();
widerrufBis.setDate(widerrufBis.getDate() + 14);
db.prepare(`
INSERT INTO users (
vertragsnummer,
vertragsvariante,
vorname, nachname, geburtsdatum,
strasse, hausnummer, plz, ort, land,
mobil, telefon, email,
kontoinhaber, iban, bic, mandatsreferenz,
status,
widerruf_moeglich_bis,
gesperrt
) VALUES (
?,?,
?,?,?,
?,?,?,?,?,
?,?,?,
?,?,?,?,
?,?,
0
)
`).run(
vertragsnummer,
u.vertragsvariante,
u.vorname, u.nachname, u.geburtsdatum,
u.strasse, u.hausnummer, u.plz, u.ort, u.land,
u.mobil, u.telefon, u.email,
u.kontoinhaber,
iban,
bic,
u.mandatsreferenz,
'aktiv',
widerrufBis.toISOString()
);
res.redirect('/users/list');
});
/* =========================
Mitgliederübersicht (AKTIV)
========================= */
router.get('/list', auth, (req, res) => {
const search = req.query.q || '';
const users = db.prepare(`
SELECT *
FROM users
WHERE status = 'aktiv'
AND (
vorname LIKE ?
OR nachname LIKE ?
OR email LIKE ?
OR ort LIKE ?
OR vertragsnummer LIKE ?
)
ORDER BY created_at DESC
`).all(
`%${search}%`,
`%${search}%`,
`%${search}%`,
`%${search}%`,
`%${search}%`
);
res.render('userList', { users, search });
});
/* =========================
User bearbeiten FORMULAR
========================= */
router.get('/edit/:id', auth, (req, res) => {
const user = db.prepare(`
SELECT *
FROM users
WHERE id = ?
AND status = 'aktiv'
`).get(req.params.id);
if (!user) {
return res
.status(404)
.send('User nicht gefunden oder Vertrag nicht aktiv');
}
user.iban = decrypt(user.iban);
user.bic = decrypt(user.bic);
res.render('editUser', { user });
});
/* =========================
User bearbeiten SPEICHERN
========================= */
router.post('/edit/:id', auth, (req, res) => {
const u = req.body;
const iban = encrypt(u.iban);
const bic = encrypt(u.bic);
db.prepare(`
UPDATE users SET
vertragsvariante = ?,
vorname = ?, nachname = ?, geburtsdatum = ?,
strasse = ?, hausnummer = ?, plz = ?, ort = ?, land = ?,
mobil = ?, telefon = ?, email = ?,
kontoinhaber = ?, iban = ?, bic = ?, mandatsreferenz = ?,
gesperrt = ?
WHERE id = ?
AND status = 'aktiv'
`).run(
u.vertragsvariante,
u.vorname, u.nachname, u.geburtsdatum,
u.strasse, u.hausnummer, u.plz, u.ort, u.land,
u.mobil, u.telefon, u.email,
u.kontoinhaber,
iban,
bic,
u.mandatsreferenz,
u.gesperrt ? 1 : 0,
req.params.id
);
res.redirect('/users/list');
});
module.exports = router;