import { softDeleteAdminUser } from "../../../db/adminUsers"; /** * DELETE /api/admin/users/[id] — Soft-Delete (DSGVO Art. 17, scrubbed PII) * * Was passiert (Details siehe db/adminUsers.ts → softDeleteAdminUser): * - PII-Felder werden auf null gesetzt (nickname, avatar, demographics) * - username → "deleted-{shortid}" * - deletedAt-Marker → User taucht in normalen Listen nicht mehr auf * * Was NICHT passiert: * - Hard-Delete (FK-Cascade auf Posts/Likes wäre destruktiv für Community-State) * - Supabase auth.users Eintrag (separater Schritt — in dieser Operation * bewusst getrennt damit kein Login-Lock vor User-Bestätigung) * * Auth: x-admin-secret. * Idempotent — wiederholtes DELETE → { ok: true, alreadyDeleted: true }. */ export default defineEventHandler(async (event) => { const config = useRuntimeConfig(); const secret = getHeader(event, "x-admin-secret"); if (!config.adminSecret || secret !== config.adminSecret) { throw createError({ statusCode: 401, message: "Unauthorized" }); } const id = getRouterParam(event, "id"); if (!id) throw createError({ statusCode: 400, message: "User-ID fehlt" }); const result = await softDeleteAdminUser(id); // Console-audit-trail bis dedicated audit_log table verfügbar ist console.log( `[admin/users] DELETE (soft) user=${id} alreadyDeleted=${result.alreadyDeleted}`, ); return result; });