import type { Rolle } from "@/generated/prisma/enums"; import { prisma } from "@/lib/db"; /** Lesemodelle der Benutzerverwaltung (#007). */ export type BenutzerZeile = { readonly id: string; readonly email: string; readonly name: string; readonly rolle: Rolle; readonly aktiv: boolean; /** Bekommt diese Person Benachrichtigungen (#034)? */ readonly meldungenAktiv: boolean; /** true, wenn das Konto ein Passwort hat, sich also lokal anmelden kann. */ readonly mitPasswort: boolean; readonly ueberOidc: boolean; readonly letzteAnmeldungAm: Date | null; }; export async function benutzerListe(): Promise { const zeilen = await prisma.benutzer.findMany({ orderBy: [{ aktiv: "desc" }, { name: "asc" }], select: { id: true, email: true, name: true, rolle: true, aktiv: true, meldungenAktiv: true, // Der Hash selbst verlaesst die Service-Schicht nie – nur die Auskunft, // ob ueberhaupt einer da ist. passwortHash: true, oidcSub: true, letzteAnmeldungAm: true, }, }); return zeilen.map((zeile) => ({ id: zeile.id, email: zeile.email, name: zeile.name, rolle: zeile.rolle, aktiv: zeile.aktiv, meldungenAktiv: zeile.meldungenAktiv, mitPasswort: zeile.passwortHash !== null, ueberOidc: zeile.oidcSub !== null, letzteAnmeldungAm: zeile.letzteAnmeldungAm, })); }