Files
slp-modular-cms/aidlc-docs/features/slp-modular-cms-api/construction/availability-module/nfr-design/middleware-design.md
T

1.6 KiB

Middleware Design — Unit 03: Availability Module

Dit document beschrijft de technische implementatie van de Availability Middleware.

1. Middleware Registratie

De middleware wordt in de Program.cs van de API Shell (U04) geregistreerd:

app.UseExceptionHandler(); // Eerst de exception handler (U01)
app.UseAvailability();     // Daarna de availability check
// ... andere middleware (Auth, Routing, etc)

2. AvailabilityMiddleware Logica

  • Bypass voor Status Endpoint: Het pad /api/availability/status wordt altijd doorgelaten zonder check.
  • Check Fase:
    • De middleware roept IAvailabilityService.IsAvailableAsync() aan.
    • Indien status == Available -> _next(context).
  • Bypass voor Admins/Owners:
    • Indien status == Maintenance of NotAvailable:
    • De middleware inspecteert het JWT token in de Authorization header handmatig (omdat de globale Authentication middleware nog niet is uitgevoerd op dit punt).
    • Indien de claim role gelijk is aan Owner of Administrator -> _next(context).
    • Anders -> Retourneer 503 Service Unavailable met ApiErrorResponse.

3. PersistentAvailabilityService

Implementatie van de interface uit Unit 01.

  • Database Opslag: Maakt gebruik van de ApplicationDbContext (Unit 02).
  • Circuit Breaker:
    • Houdt in een statische variabele de _lastErrorTime en _cachedStatus bij.
    • Indien DateTimeOffset.UtcNow - _lastErrorTime < 30 seconden -> Retourneer de _cachedStatus (default: Available) zonder de database te pollen.
  • Logging: Elke blokkade wordt gelogd met het IP-adres van de client en het gevraagde pad.