Changes backend in preparation for frontend work

This commit is contained in:
2026-06-19 12:15:08 +02:00
parent b5357f213a
commit 23e2150140
22 changed files with 631 additions and 92 deletions
@@ -0,0 +1,62 @@
# Logical Components — Unit 0: Backend Prerequisites
The following logical components and configuration structures are defined to support the NFR implementation.
## 1. Middleware Ordering (Pipeline Design)
The order of middleware registration is critical for security and performance. The pipeline is configured in `Program.cs`.
```mermaid
graph TD
Start((Start)) --> Exc[GlobalExceptionHandler]
Exc --> RL[Rate Limiter]
RL --> CORS[CORS Middleware]
CORS --> Auth[Authentication]
Auth --> Map[Endpoint Mapping]
Map --> End((End))
classDef infra fill:#cbd5e0,stroke:#1a202c,stroke-width:2px,color:#1a202c;
classDef security fill:#feb2b2,stroke:#742a2a,stroke-width:2px,color:#742a2a;
classDef core fill:#9ae6b4,stroke:#22543d,stroke-width:2px,color:#22543d;
class Start,End,Map infra;
class Exc,RL,CORS,Auth security;
```
Text alternative: Sequence of middleware in the ASP.NET Core pipeline (colored nodes indicate role).
## 2. Configuration Structure (appsettings.json)
Following the `dotnet-appsettings` skill pattern, the configuration for NFRs is centralized.
### CORS Configuration
```json
"Cors": {
"AllowedOrigins": [
"https://localhost:5173"
]
}
```
### Rate Limiting Configuration
```json
"RateLimiting": {
"Login": {
"PermitLimit": 5,
"WindowSeconds": 60
},
"Refresh": {
"PermitLimit": 20,
"WindowSeconds": 60
}
}
```
## 3. Extension Methods
To keep `Program.cs` clean, logical components are encapsulated in `ServiceCollectionExtensions.cs`.
| Component | Responsibility |
|-----------|----------------|
| `AddCmsCors()` | Configures the CORS policy based on settings. |
| `AddCmsRateLimiting()` | Defines the Fixed and Sliding window policies for auth. |
| `AddCmsExceptionHandling()` | Registers the `GlobalExceptionHandler` and ProblemDetails. |
## 4. ProblemDetails Integration
The `GlobalExceptionHandler` will be modified to fully replace the custom `ApiErrorResponse` with standard `ProblemDetails` as the return type. No backward compatibility for the old error format is required.