Files
tactical-docs/install-notes/015-initiales-postgresql-datenbankschema-und-migrationen.md
T
2026-06-14 06:44:58 +00:00

279 lines
4.5 KiB
Markdown

# 015 - Initiales PostgreSQL-Datenbankschema und Migrationen
## Ziel
Für RUVNOX Tactical wurde die erste PostgreSQL-Datenbankmigration angelegt und erfolgreich auf CT101 angewendet.
## Umgebung
- Tactical Server Container: RUVNOX-TACTICAL
- PostgreSQL Container: CT101 / PostgreSQL
- PostgreSQL IP: 192.168.178.4
- Datenbank: ruvnox_tactical
- Datenbank-User: ruvnox_tactical
- Deploy-Repository: /opt/ruvnox/tactical/deploy-repo
## Neue Dateien im tactical-deploy Repository
database/migrations/001_initial_schema.sql
scripts/apply-db-migrations.sh
## Angelegte Tabellen
Die Migration legt folgende Tabellen an:
- app_users
- devices
- auth_sessions
- operation_rooms
- operation_room_members
- messages
- audit_events
- schema_migrations
## Migration 001_initial_schema.sql
Die Migration aktiviert pgcrypto:
CREATE EXTENSION IF NOT EXISTS pgcrypto;
pgcrypto wird für UUID-Erzeugung über gen_random_uuid() verwendet.
## app_users
Speichert Benutzerkonten.
Wichtige Felder:
- id
- username
- display_name
- role
- password_hash
- is_active
- created_at
- updated_at
Erlaubte Rollen:
- admin
- dispatcher
- operator
- viewer
## devices
Speichert registrierte Endgeräte.
Wichtige Felder:
- id
- user_id
- device_name
- platform
- public_key
- last_seen_at
- is_active
- created_at
- updated_at
## auth_sessions
Speichert Login- und Refresh-Sessions.
Wichtige Felder:
- id
- user_id
- device_id
- refresh_token_hash
- expires_at
- revoked_at
- created_at
- last_seen_at
## operation_rooms
Speichert Einsatzräume.
Wichtige Felder:
- id
- code
- name
- description
- classification
- is_active
- created_by
- created_at
- updated_at
Erlaubte Klassifizierungen:
- public
- internal
- confidential
- restricted
## operation_room_members
Speichert Raum-Mitgliedschaften.
Wichtige Felder:
- room_id
- user_id
- member_role
- joined_at
- left_at
Erlaubte Rollen:
- lead
- dispatcher
- member
- observer
## messages
Speichert Nachrichten-Metadaten und serverseitig lesbare Einsatzraum-Nachrichten.
Wichtige Felder:
- id
- room_id
- sender_user_id
- sender_device_id
- message_type
- content_text
- metadata
- created_at
- deleted_at
Erlaubte Nachrichtentypen:
- text
- system
- status
- file
Hinweis: Diese Tabelle ist für Einsatzräume gedacht, bei denen der Server lesen und schreiben darf. Für echte 1:1-Ende-zu-Ende-verschlüsselte Nachrichten wird später eine separate Struktur ergänzt.
## audit_events
Speichert sicherheits- und betriebsrelevante Ereignisse.
Wichtige Felder:
- id
- actor_user_id
- event_type
- entity_type
- entity_id
- ip_address
- user_agent
- details
- created_at
## schema_migrations
Speichert angewendete Migrationen.
Wichtige Felder:
- version
- checksum
- applied_at
Damit erkennt das Migrationsscript bereits angewendete Migrationen und schützt vor nachträglich veränderten SQL-Dateien.
## Trigger
Die Migration legt die Funktion set_updated_at() an.
Diese aktualisiert updated_at automatisch bei Updates.
Trigger wurden gesetzt auf:
- app_users
- devices
- operation_rooms
## Indizes
Angelegt wurden Indizes für:
- devices.user_id
- auth_sessions.user_id
- auth_sessions.device_id
- operation_room_members.user_id
- messages.room_id und messages.created_at
- messages.sender_user_id
- audit_events.actor_user_id
- audit_events.created_at
- audit_events.entity_type und audit_events.entity_id
## Migrationsscript
Das Script liegt unter:
scripts/apply-db-migrations.sh
Aufgaben:
1. Lädt /opt/ruvnox/tactical/config/server.env
2. Setzt PGPASSWORD aus DB_PASSWORD
3. Erstellt schema_migrations falls nötig
4. Prüft Checksums bereits angewendeter Migrationen
5. Wendet neue SQL-Migrationen transaktional an
6. Bricht bei Checksum-Abweichungen ab
Ausführung:
cd /opt/ruvnox/tactical/deploy-repo
./scripts/apply-db-migrations.sh
## Verifikation
Tabellenprüfung:
psql -h 192.168.178.4 -p 5432 -U ruvnox_tactical -d ruvnox_tactical -c "\\dt"
Ergebnis:
- app_users
- audit_events
- auth_sessions
- devices
- messages
- operation_room_members
- operation_rooms
- schema_migrations
Migrationstabelle:
select version, applied_at from schema_migrations order by applied_at;
Ergebnis:
001_initial_schema.sql wurde angewendet am 2026-06-14 06:41:04 UTC.
## Git-Commit
tactical-deploy:
9e6d27e Add initial database schema migration
## Abschlussstand
- Migration erfolgreich angewendet
- 8 Tabellen vorhanden
- schema_migrations aktiv
- Migration im tactical-deploy Repository gepusht
- SQL-Datei visuell geprüft und sauber
## Nächster Abschnitt
Als nächstes folgt die serverseitige Datenbankzugriffsschicht im Ktor-Server.