# Datenbank-Setup

Dieses Dokument beschreibt, wie die Datenbank für das Meldestelle-Projekt eingerichtet und verwaltet wird.

## Überblick

Das Projekt verwendet PostgreSQL als Datenbank und Exposed als ORM-Framework. Die Datenbankmigrationen werden mit einem eigenem, auf Exposed basierenden Migrationssystem verwaltet.

## Konfiguration

Die Datenbankkonfiguration erfolgt über Umgebungsvariablen. Diese können entweder direkt im Betriebssystem gesetzt oder über eine `.env`-Datei bei Verwendung von Docker Compose bereitgestellt werden.

### Erforderliche Umgebungsvariablen

- `DB_HOST`: Hostname der Datenbank (Standard: `localhost`)
- `DB_PORT`: Port der Datenbank (Standard: `5432`)
- `DB_NAME`: Name der Datenbank (Standard: `meldestelle_db`)
- `DB_USER`: Benutzername für die Datenbank (Standard: `meldestelle_user`)
- `DB_PASSWORD`: Passwort für den Datenbankbenutzer

### .env-Datei

Für die lokale Entwicklung und Docker Compose wird eine `.env`-Datei im Projektwurzelverzeichnis verwendet. Ein Beispiel:

```
# Datenbank-Konfiguration
POSTGRES_USER=meldestelle_user
POSTGRES_PASSWORD=secure_password_change_me
POSTGRES_DB=meldestelle_db

# PgAdmin Konfiguration
PGADMIN_DEFAULT_EMAIL=admin@example.com
PGADMIN_DEFAULT_PASSWORD=admin_password_change_me
PGADMIN_PORT=5050

# API Gateway Konfiguration
API_PORT=8081
```

## Datenbankmigrationen

Das Projekt verwendet ein eigenes, auf Exposed basierendes Migrationssystem. Jede Migration ist eine Klasse, die von `Migration` erbt und eine eindeutige Versionsnummer und Beschreibung hat.

### Migrations-Struktur

Migrationen werden in den entsprechenden Modulen definiert und im API-Gateway zentral registriert und ausgeführt.

### Hinzufügen einer neuen Migration

1. Erstellen Sie eine neue Klasse, die von `Migration` erbt
2. Implementieren Sie die `up()`-Methode, um die nötigen Änderungen vorzunehmen
3. Registrieren Sie die Migration in `MigrationSetup.kt`

Beispiel:

```kotlin
class MyNewMigration : Migration(5, "Add new feature tables") {
    override fun up() {
        SchemaUtils.create(MyNewTable)
    }
}
```

### Ausführen von Migrationen

Migrationen werden automatisch beim Start der Anwendung ausgeführt. Es werden nur Migrationen ausgeführt, die noch nicht in der Datenbank registriert sind.

## Datenbankstruktur

Die Datenbankstruktur ist in verschiedene Bereiche unterteilt, die den Modulen des Projekts entsprechen:

1. **Master Data** - Stammdaten wie Länder, Bundesländer, Sportarten
2. **Member Management** - Personen, Vereine, Mitgliedschaften
3. **Horse Registry** - Pferde und deren Besitzer
4. **Event Management** - Veranstaltungen und zugehörige Daten

## Entwicklungsumgebung einrichten

### Mit Docker Compose

1. Erstellen Sie eine `.env`-Datei mit den erforderlichen Umgebungsvariablen
2. Führen Sie `docker-compose up -d db` aus, um nur die Datenbank zu starten
3. Alternativ `docker-compose up -d` für das gesamte System

### PgAdmin verwenden

Das Projekt enthält einen PgAdmin-Service für die einfache Verwaltung der Datenbank über eine Web-Oberfläche.

1. Starten Sie die Anwendung mit Docker Compose:
   ```
   docker-compose up -d
   ```

2. Zugriff auf PgAdmin:
   - Öffnen Sie http://localhost:5050 im Browser
   - Melden Sie sich mit den Zugangsdaten aus der .env-Datei an:
     - E-Mail: admin@example.com (oder Wert von PGADMIN_DEFAULT_EMAIL)
     - Passwort: admin_password_change_me (oder Wert von PGADMIN_DEFAULT_PASSWORD)

3. Verbindung zur Datenbank in PgAdmin einrichten:
   - Rechtsklick auf "Servers" > "Create" > "Server..."
   - Name: Meldestelle
   - Connection-Tab:
     - Host: db
     - Port: 5432
     - Maintenance database: meldestelle_db
     - Username: meldestelle_user
     - Password: secure_password_change_me (oder Wert von DB_PASSWORD)

4. Überprüfen Sie, ob die Tabellen korrekt erstellt wurden, einschließlich der _migrations-Tabelle.

### Manuell

1. Installieren Sie PostgreSQL auf Ihrem System
2. Erstellen Sie eine Datenbank und einen Benutzer
3. Setzen Sie die Umgebungsvariablen oder passen Sie die Standardwerte in `DatabaseConfig.kt` an
4. Starten Sie die Anwendung

## Fehlerbehebung

### Verbindungsprobleme

- Überprüfen Sie, ob die PostgreSQL-Instanz läuft
- Überprüfen Sie die Verbindungsparameter in den Umgebungsvariablen
- Überprüfen Sie Firewalls und Netzwerkeinstellungen

### Migrationsfehler

- Prüfen Sie die Logs auf detaillierte Fehlermeldungen
- Migrationen werden nur einmal ausgeführt - Änderungen an bestehenden Migrationen haben keine Auswirkung
- Bei schwerwiegenden Problemen kann die `_migrations`-Tabelle manuell bearbeitet werden (nur für Fortgeschrittene)

## Letztes Update

2025-07-21
