# ED-02-002 Repository Integration

**Status:** Ready for Implementation\
**Parent:** ED-02 Context Persistence

## Ziel

Dieses Dokument beschreibt die Erweiterung der bestehenden
Repository-Implementierung, um `ContextItem` gemeinsam mit dem
`SourceValue`-Aggregate zu persistieren und zu laden.

## Scope

-   Erweiterung der relationalen Repositories
-   Persistenz von ContextItems
-   Laden von ContextItems
-   Aggregate-Konsistenz

Nicht Bestandteil:

-   Relationales Mapping (ED-02-001)
-   Rehydration (ED-02-003)
-   Tests (ED-02-004)

## Architektur

`ContextItem` besitzt kein eigenes Repository.

Die Persistenz erfolgt ausschließlich über das bestehende
`SourceValueRepository`.

``` text
SourceValueRepository
        │
        ├── save(SourceValue)
        │       └── ContextItems
        │
        └── load(id)
                └── ContextItems
```

## Speichern

Beim Speichern eines `SourceValue`:

1.  `SourceValue` persistieren.
2.  Vorhandene ContextItems des Aggregats entfernen.
3.  Aktuelle ContextItems einfügen.
4.  Commit innerhalb derselben Transaktion.

Die Persistenz spiegelt damit stets den aktuellen Zustand des Aggregats
wider.

## Laden

Beim Laden eines `SourceValue`:

-   alle Datensätze aus `context_item`
-   Filter über `source_value_id`
-   Sortierung `ORDER BY id ASC`

Die eigentliche Erzeugung der Domain-Objekte erfolgt in ED-02-003.

## Transaktionsgrenze

Alle Schreiboperationen erfolgen innerhalb der bestehenden
Aggregate-Transaktion.

Damit gilt:

-   keine Teilpersistenz
-   Rollback bei Fehlern
-   atomare Speicherung des gesamten Aggregats

## Fehlerbehandlung

Repositorys validieren keine fachlichen Invarianten.

Diese werden bereits durch das Domain-Modell garantiert.

Repositorys behandeln ausschließlich:

-   Datenbankzugriffe
-   Transaktionen
-   SQL-Fehler

## Akzeptanzkriterien

-   Kein eigenes ContextItemRepository
-   Persistenz ausschließlich über SourceValueRepository
-   Aggregate bleibt konsistent
-   Deterministische Ladeabfrage
-   Keine Änderung des Domain-Modells
