feat(nextcloud-status): Clouds verwalten, Logos, stündliche Prüfung und Sortierung

- Ändern, Entfernen, Logo-Upload und -Abruf, Sammelprüfung nur mit Verwalten
- Stündlicher Auftrag beim Start registriert, Prüfung je Cloud an ihren Mandanten gebunden
- Sortierung nach Kundenname, Status, Version und Support-Ende, je Benutzer gemerkt
- Formular zum Anlegen und Bearbeiten, Zugriffsinventar angepasst

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-02 14:54:58 +02:00
parent 5ef7b0c6cc
commit 6698ef1a92
23 changed files with 2061 additions and 30 deletions
@@ -189,10 +189,20 @@ const RELATION_SPEC_EXCEPTIONS = new Set<string>(['apps/api/src/tenders/backfill
* gebunden ueber `forTenant(prisma, c.tenantId)`. Die passende Regel ist
* `system_read_policy ... FOR SELECT` auf "Reminder" (Migration
* 20260929140000). Summe neu: 6 Dateien, 7 Aufrufe.
*
* quick-261002-k67 (Aufgabe 2): eine siebte Datei kommt hinzu —
* `nextcloud-status/nextcloud-status.service.ts`, EIN Aufruf:
* `loadAllInstancesForScheduler()` liest fuer den stuendlichen Planer nur
* Kennung und Mandant ALLER Clouds (`select: { id, tenantId }`, nie Logo-Bytes).
* Geprueft und geschrieben wird danach je Cloud gebunden ueber
* `forTenant(prisma, tenantId)`. Die passende Regel ist
* `system_read_policy ... FOR SELECT` auf "NextcloudInstance" (Migration
* 20261002150000). Summe neu: 7 Dateien, 8 Aufrufe.
*/
const FORSYSTEM_ALLOWED_CALL_SITES = new Map<string, number>([
['apps/api/src/dkv/dkv.service.ts', 1],
['apps/api/src/ldap/ldap-config.service.ts', 2],
['apps/api/src/nextcloud-status/nextcloud-status.service.ts', 1],
['apps/api/src/proxmox/proxmox.service.ts', 1],
['apps/api/src/reminders/reminder-mail.scheduler.ts', 1],
['apps/api/src/tenders/tender-digest.scheduler.ts', 1],