/* ===================================================================== routes/account.js — Kundenkonto-Selbstbedienung: me, logout, delete (DSGVO Art. 17), export (DSGVO Art. 15/20). 1:1 portiert aus functions/api/account/*.js. ===================================================================== */ import { Router } from "express"; import { getCustomer, clearCustomerCookie } from "../lib/customer-auth.js"; import { db } from "../db.js"; export const accountRouter = Router(); accountRouter.get("/api/account/me", async (req, res) => { const customer = await getCustomer(req); if (!customer) return res.json({ ok: false }); return res.json({ ok: true, customer: { email: customer.email, name: customer.name, provider: customer.provider, seit: customer.created_at }, }); }); accountRouter.post("/api/account/logout", (req, res) => { clearCustomerCookie(res); return res.json({ ok: true }); }); accountRouter.post("/api/account/delete", async (req, res) => { const customer = await getCustomer(req); if (!customer) return res.status(401).json({ ok: false, error: "Nicht angemeldet." }); try { db.prepare(`DELETE FROM customers WHERE id = ?`).run(customer.id); } catch { return res.status(500).json({ ok: false, error: "Konto konnte nicht gelöscht werden. Bitte versuche es erneut." }); } clearCustomerCookie(res); return res.json({ ok: true }); }); accountRouter.get("/api/account/export", async (req, res) => { const customer = await getCustomer(req); if (!customer) return res.status(401).json({ ok: false, error: "Nicht angemeldet." }); const daten = { konto: { email: customer.email, name: customer.name, anmeldeart: customer.provider, erstelltAm: customer.created_at }, hinweis: "Dies sind alle Daten, die Van's DIY & Bastelbedarf zu deinem Kundenkonto speichert. " + "Bereits aufgegebene Bestellungen werden getrennt davon aus gesetzlichen Aufbewahrungsgründen " + "weiter gespeichert (siehe Datenschutzerklärung, Abschnitt Bestellabwicklung).", }; res.setHeader("Content-Disposition", 'attachment; filename="meine-daten.json"'); return res.status(200).json(daten); });