174 lines
4.0 KiB
JavaScript
174 lines
4.0 KiB
JavaScript
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;
|