import { db } from '@/lib/db' import { visibleCaseWhere } from '@/lib/access/caseFilter' import type { EffectivePermissions } from '@/lib/auth/permissions' /** * Vorschaukarten für Aktenzeichen im Chattext. * * **Serverseitig aufgelöst, mit der Stufe des Lesers.** Wer die Akte nicht * sehen darf, bekommt eine neutrale Karte ohne Titel und ohne Status — nie den * Titel mitschicken und im Client ausblenden. Siehe docs/06. * * Ob eine Akte existiert, verrät die Karte damit auch nicht: eine unbekannte * und eine verborgene Akte sehen gleich aus. */ export type CasePreview = | { caseNumber: string; visible: true; title: string; status: string; classification: number } | { caseNumber: string; visible: false } export async function resolveCasePreviews( p: EffectivePermissions, caseNumbers: string[], ): Promise> { const eindeutig = [...new Set(caseNumbers)].slice(0, 50) if (eindeutig.length === 0) return new Map() const treffer = await db.case.findMany({ where: { AND: [visibleCaseWhere(p), { caseNumber: { in: eindeutig } }] }, select: { caseNumber: true, title: true, status: true, classification: true }, }) const sichtbar = new Map(treffer.map((akte) => [akte.caseNumber, akte])) return new Map( eindeutig.map((nummer) => { const akte = sichtbar.get(nummer) return [ nummer, akte ? { caseNumber: nummer, visible: true as const, title: akte.title, status: akte.status, classification: akte.classification, } : { caseNumber: nummer, visible: false as const }, ] }), ) }