104 lines
3.2 KiB
Markdown
104 lines
3.2 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)
|
|
|
|
## Conventional Commits
|
|
|
|
Ab jetzt werden [Conventional Commits](https://www.conventionalcommits.org/) verwendet:
|
|
|
|
```
|
|
<type>(<scope>): <description>
|
|
|
|
[optional body]
|
|
|
|
[optional footer]
|
|
```
|
|
|
|
### Typen
|
|
- `feat`: Neue Funktion
|
|
- `fix`: Bugfix
|
|
- `docs`: Dokumentation
|
|
- `style`: Formatierung (keine Code-Änderung)
|
|
- `refactor`: Code-Refactoring ohne Funktionsänderung
|
|
- `test`: Tests hinzugefügt/ergänzt
|
|
- `chore`: Build-Prozess, Abhängigkeiten, Konfiguration
|
|
|
|
### Beispiele
|
|
```
|
|
feat(iam): add user profile management
|
|
fix(mako): handle consent rejected event correctly
|
|
docs: update AGENTS.md with conventional commits
|
|
test(iam): add UserService unit tests
|
|
```
|