chore(backend): rename lastSyncTimestamp to since across Ping sync API for consistency
- Updated parameter name in `PingController`, `PingApi`, and related tests to align with SyncManager conventions.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
---
|
||||
type: Report
|
||||
status: ACTIVE
|
||||
owner: Backend Developer
|
||||
last_update: 2026-02-01
|
||||
---
|
||||
|
||||
# Abschlussbericht: Backend Hardening & Infrastructure (Ping-Service)
|
||||
|
||||
## 1. Management Summary
|
||||
Der **Ping-Service** wurde erfolgreich als technischer Blueprint ("Tracer Bullet") gehärtet. Er erfüllt nun alle Anforderungen der **Phase 1 (Backend Hardening)** der Q1 Roadmap.
|
||||
Die Infrastruktur wurde modernisiert (Valkey 9.0), und die Testabdeckung wurde durch echte Integrationstests (Testcontainers) auf ein Enterprise-Niveau gehoben.
|
||||
|
||||
Der Service ist **Production Ready** und dient ab sofort als Vorlage für alle fachlichen Microservices.
|
||||
|
||||
## 2. Durchgeführte Maßnahmen
|
||||
|
||||
### 🛡️ Security & Resilience
|
||||
* **OAuth2 Resource Server:** Implementiert und konfiguriert (`GlobalSecurityConfig`). Tokens vom Keycloak werden validiert.
|
||||
* **RBAC:** Endpunkte wie `/ping/secure` sind durch Rollen geschützt (`@PreAuthorize`).
|
||||
* **CircuitBreaker:** Resilience4j sichert DB-Zugriffe ab (`@CircuitBreaker`). Fallback-Methoden ("Degraded Mode") sind aktiv.
|
||||
|
||||
### 🏗️ Infrastructure Upgrade
|
||||
* **Valkey Migration:** Erfolgreiche Migration von Redis (proprietär) auf **Valkey 9.0** (Open Source) in `docker-compose` und Environment-Configs.
|
||||
* Images: `valkey/valkey:9.0`
|
||||
* Kompatibilität: Vollständig gegeben (Drop-In Replacement).
|
||||
|
||||
### 🧪 Quality Assurance (Testing)
|
||||
* **Integrationstests:** Implementierung von `PingRepositoryTest` mit **Testcontainers** (Postgres).
|
||||
* Prüft Flyway-Migrationen (`V1`, `V2`).
|
||||
* Prüft JPA-Mapping und UUIDv7-Persistenz gegen eine echte Datenbank.
|
||||
* **Test-Isolierung:** Lösung komplexer Spring-Kontext-Probleme (`BeanDefinitionOverrideException`) durch:
|
||||
* Einführung einer isolierten `TestPersistenceConfig` für Repository-Tests.
|
||||
* Nutzung von `@TestConfiguration` in Controller-Tests.
|
||||
* Entfernung des hinderlichen `@Profile("!test")` im `PingRepositoryAdapter`.
|
||||
|
||||
### 📊 Observability
|
||||
* **Actuator:** Health, Info, Metrics und Prometheus-Endpunkte sind exponiert.
|
||||
* **Tracing:** Zipkin-Integration vorbereitet via `monitoring-client`.
|
||||
|
||||
## 3. Technische Details & Learnings
|
||||
|
||||
### Problem: Spring Context Pollution
|
||||
Während der Implementierung der Integrationstests kam es zu Konflikten zwischen den Bean-Definitionen verschiedener Tests (`BeanDefinitionOverrideException`).
|
||||
**Lösung:**
|
||||
Strikte Trennung der Kontexte. `PingRepositoryTest` lädt nun **nicht** mehr die gesamte `PingServiceApplication`, sondern nur eine minimale `TestPersistenceConfig`, die gezielt nur das Persistence-Layer scannt. Dies beschleunigt die Tests und verhindert Seiteneffekte durch Controller oder Security-Configs.
|
||||
|
||||
### Problem: Profile-Exclusion
|
||||
Der `PingRepositoryAdapter` war mit `@Profile("!test")` annotiert. Dies verhinderte, dass Integrationstests (die im `test`-Profil laufen) den echten Adapter nutzen konnten.
|
||||
**Lösung:**
|
||||
Annotation entfernt. In Unit-Tests wird der Adapter ohnehin durch Mocks ersetzt, daher ist die Exclusion unnötig und schädlich für Integrationstests.
|
||||
|
||||
## 4. Nächste Schritte (Handover an Frontend)
|
||||
Der Backend-Stack ist stabil. Der Frontend-Expert kann nun die Integration (Phase 2) abschließen:
|
||||
1. Login gegen Keycloak.
|
||||
2. Aufruf von `/ping/secure` mit Bearer-Token.
|
||||
3. Test des Delta-Syncs (`/ping/sync`).
|
||||
|
||||
---
|
||||
*Gez. Senior Backend Developer*
|
||||
Reference in New Issue
Block a user