meldestelle/README_DATABASE_SETUP.md
2025-07-21 12:08:20 +02:00

136 lines
4.6 KiB
Markdown

# 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