Files
Harlekin e0b03ea336
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Gedankenstriche durch Bindestriche ersetzt
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00

50 lines
1.7 KiB
TypeScript

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<Map<string, CasePreview>> {
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 },
]
}),
)
}