eeg_portal/AGENTS.md
Bernhard Müller 8f74dbde35 complete MaKo consent flow and admin initialization
- Add MakoConsensListener for consent event handling (approved/rejected/failed)
- Add AdminDataInitializer with random password generation for dev profile
- Add findByAtNumber to MeteringPointRepository
- Fix User.isEnabled() Lombok/Spring Security conflict
- Update pom.xml with explicit Lombok 1.18.38 version
- Update .gitignore for frontend, H2, and test files
- Add AGENTS.md project documentation
2026-07-21 10:01:19 +02:00

75 lines
2.6 KiB
Markdown

# 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)