feat(quick-261003-387): Kategorien-API - Anlegen, Sortieren, Zuordnen, Loeschen mit Verschieben, Ueberlagerung in allen Modullisten

- Verwaltungs-Endpunkte nur fuer Administratoren, statische Routen vor :key
- Loeschen verschiebt alle Eintraege inkl. persoenlicher eigener Module in einer Transaktion, ohne Ziel 409
- /modules, /modules/catalog und /module-grants/matrix liefern wirksame Kategorie und Reihenfolge
- eigene Module pruefen die Kategorie gegen die Organisation (400 bei unbekannter)
- Zugriffsinventar nachgezogen

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-03 02:39:36 +02:00
parent 8ec116c75a
commit af1878d5ee
15 changed files with 1152 additions and 37 deletions
@@ -1,12 +1,11 @@
import { OmitType, PartialType } from '@nestjs/mapped-types';
import { CUSTOM_MODULE_CATEGORIES } from '@tessera/shared';
import { Transform } from 'class-transformer';
import {
IsBoolean,
IsIn,
IsNotEmpty,
IsOptional,
IsString,
Matches,
MaxLength,
Validate,
ValidatorConstraint,
@@ -60,8 +59,13 @@ export class CreateCustomModuleDto {
@Validate(NurHttpsOhneZugangsdatenConstraint)
url!: string;
@IsIn([...CUSTOM_MODULE_CATEGORIES])
category!: (typeof CUSTOM_MODULE_CATEGORIES)[number];
/**
* Kennung einer Kategorie der Organisation (quick-261003-387). Das Format
* prueft das DTO, ob die Kategorie existiert der Dienst (sonst 400).
*/
@IsString()
@Matches(/^[a-z0-9][a-z0-9-]{0,59}$/)
category!: string;
/**
* quick-260929-dzu: `true` legt einen gemeinsamen Eintrag fuer alle Benutzer