Skip to main content

Dashboard-API: Center-Scoping (Listen)

Liste-Endpoints nutzen dieselbe Schicht:

  1. Explizites Center: ?centerId=<uuid> → bei eingeloggtem User assertCenterAccess; ohne Login nur Einschränkung auf dieses Center (z. B. Kiosk/Proxy mit ?centerId=).
  2. Kein centerId in der URL: Session erforderlich; buildCenterFilter(session)params.centerIds.
  3. pickCenterWhereFragment / createStandardWhereClause in lib/api/utils.ts mappen auf Prisma: centerId bzw. centerId: { in: [...] }. Leeres centerIdskeine Treffer.

Server-Helfer: mergeSessionCenterScopeIntoListParams in apps/dashboard/src/lib/api/list-route-center-scope.ts — vor findMany aufrufen (u. a. GET /api/events, /api/jobs, /api/services, Hot-Picks, /api/content/metrics, /api/content/recent). Manuelle Prisma-Routes verwenden pickCenterWhereFragment für das Center-Fragment der where-Klausel.

Hinweise

  • Platzhalter all gehört nicht in die Query. centerIdQueryParam in apps/dashboard/src/lib/center-query.ts; extractQueryParams verwirft ?centerId=all.
  • GET /api/offers baut den Session-Filter weiterhin direkt in Prisma ein (gleiche Semantik).
  • News/Shops: createStandardWhereClause (nutzt pickCenterWhereFragment).

So bleiben Dashboard-Listen bei gewechseltem Center oder „Alle Center“ (Super-Admin) konsistent.

Verwandt: Audit: Namespace /api/content/* — welche Routen dort noch CORS/ohne Session sind und wer sie aufruft.

Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/developer-guide/dashboard-api-center-scoping