# AGENTS.md - EEG Portal ## Projektübersicht **EEG Portal** - Portal zur Verwaltung von Energiegemeinschaften in Österreich. Behandelt: Benutzerregistrierung, Messpunkt-Consent-Workflows (MaKo), EDA-Topologieprüfungen, Energiegemeinschaftsverwaltung, Mitgliedschaften und Tarife. ## Architektur **Modularer Monolith** - Designed für spätere Domänen-Extraktion als Maven-Module. ### Backend (Spring Boot) - **Java 21**, Spring Boot 4.0.6 - **Pakete:** - `iam/` - Identitäts- und Zugriffsverwaltung (Auth, Users, Security) - `community/` - Energiegemeinschaften, Mitgliedschaften, Messpunkte - `mako/` - EDA-Kommunikation (Consent, Topologie) - `tariff/` - Tarifverwaltung - `dashboard/` - Dashboard-Statistiken - `common/` - Events, Exceptions, gemeinsame Types ### Frontend (Angular) - Angular 21, TypeScript 5.9, Tailwind CSS 4 - API-Client wird aus OpenAPI-Spec generiert (`npm run generate-api`) ## Wichtige Patterns ### Event-basierte Kommunikation Domänen kommunizieren über Spring Application Events: ``` UserRegisteredEvent → UserApprovedEvent → InitiateMakoConsentEvent EdaTopologyCheckEvent → EdaTopologyCompletedEvent / EdaTopologyFailedEvent MakoConsensApprovedEvent / MakoConsensRejectedEvent / MakoConsensTechnicalFailedEvent ``` ### MaKo-Zustandsautomat (MeteringPoint.fireTrigger()) ``` NEW → WAITING_FOR_CONSENT → CONSENT_GRANTED → ACTIVE ↓ REJECTED / ERROR ``` ### Sicherheit - JWT-basiert (HS256), 2h Ablauf - Rollen: `ADMIN`, `MEMBER` - Admin-Endpunkte: `/api/admin/**`, `/api/community/admin/**` ## Entwicklung starten ```bash # Backend .\mvnw spring-boot:run -pl eeg_backend -Dspring-boot.run.arguments=--spring.profiles.active=dev # Frontend cd eeg_frontend && ng serve ``` ## Wichtige Dateien | Datei | Beschreibung | |-------|--------------| | `eeg_backend/.../community/domain/MeteringPoint.java:fireTrigger()` | MaKo-Zustandsautomat | | `eeg_backend/.../community/event/listener/MakoConsentListener.java` | Consent-Event-Handler | | `eeg_backend/.../mako/event/listener/EdaCommuncationEventListener.java` | EDA-Kommunikation | | `eeg_backend/.../iam/config/AdminDataInitializer.java` | Initialer Admin-User (dev) | | `eeg_frontend/openapi.yaml` | API-Vertrag für Frontend-Generierung | ## Regeln - Fehlernachrichten sind auf **Deutsch** - `@Profile("dev")` für simulierte EDA-Services - EDA-Simulation: AT-Nummer endet mit "REJECT" → Ablehnung, "ERROR" → technischer Fehler - Explizite `isEnabled()`-Überschreibung in `User.java` nötig (Lombok/Spring Security Konflikt)