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
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die README; an keiner Stelle Bedeutung, nur Zeichensetzung.
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import { db } from '@/lib/db'
|
|
import { visibleCaseWhere } from '@/lib/access/caseFilter'
|
|
import { AccessError } from '@/lib/errors'
|
|
import { loadVisibleCase } from '@/lib/cases/service'
|
|
import type { EffectivePermissions } from '@/lib/auth/permissions'
|
|
|
|
/**
|
|
* Beobachtungsliste.
|
|
*
|
|
* Wer eine Akte beobachtet, sieht sie auf der Übersicht und bekommt ihre
|
|
* Meldungen, auch ohne beteiligt zu sein. **Zugriff verschafft das nicht**:
|
|
* beobachten kann man nur, was man ohnehin sehen darf, und fällt die Akte
|
|
* später über die eigene Stufe, verschwindet sie auch aus der Liste - die
|
|
* Abfrage läuft durch dieselbe Sichtbarkeitsprüfung wie die Fallliste.
|
|
*/
|
|
export async function listWatched(p: EffectivePermissions, take = 20) {
|
|
return db.case.findMany({
|
|
where: { AND: [visibleCaseWhere(p), { watches: { some: { userId: p.userId } } }] },
|
|
orderBy: [{ updatedAt: 'desc' }],
|
|
take,
|
|
select: {
|
|
id: true,
|
|
caseNumber: true,
|
|
title: true,
|
|
status: true,
|
|
classification: true,
|
|
updatedAt: true,
|
|
},
|
|
})
|
|
}
|
|
|
|
export async function isWatching(p: EffectivePermissions, caseId: string): Promise<boolean> {
|
|
const eintrag = await db.watch.findUnique({
|
|
where: { userId_caseId: { userId: p.userId, caseId } },
|
|
select: { userId: true },
|
|
})
|
|
return eintrag !== null
|
|
}
|
|
|
|
/** Umschalten. Gibt zurück, ob danach beobachtet wird. */
|
|
export async function toggleWatch(
|
|
p: EffectivePermissions,
|
|
caseNumber: string,
|
|
): Promise<{ watching: boolean }> {
|
|
const akte = await loadVisibleCase(p, caseNumber)
|
|
if (!akte) throw new AccessError('not-found')
|
|
|
|
const vorhanden = await isWatching(p, akte.id)
|
|
if (vorhanden) {
|
|
await db.watch.delete({ where: { userId_caseId: { userId: p.userId, caseId: akte.id } } })
|
|
return { watching: false }
|
|
}
|
|
|
|
await db.watch.create({ data: { userId: p.userId, caseId: akte.id } })
|
|
return { watching: true }
|
|
}
|