Refactor master data infrastructure to streamline Reiter and Bundesland relationships, add V012 migration, harmonize domain models, implement repository methods for enhanced ZNS import logic, and update associated tests.

This commit is contained in:
2026-04-06 16:39:06 +02:00
parent 1a6f2ea7ad
commit 0ae9a1f1b8
15 changed files with 284 additions and 76 deletions
@@ -7,6 +7,8 @@ import at.mocode.masterdata.infrastructure.persistence.funktionaer.FunktionaerTa
import at.mocode.masterdata.infrastructure.persistence.funktionaer.QualifikationMasterTable
import at.mocode.masterdata.infrastructure.persistence.pferd.HorseTable
import at.mocode.masterdata.infrastructure.persistence.reiter.ReiterTable
import at.mocode.masterdata.infrastructure.persistence.reiter.ReiterLizenzTable
import at.mocode.masterdata.infrastructure.persistence.reiter.BundeslandTable
import at.mocode.masterdata.infrastructure.persistence.verein.VereinTable
import jakarta.annotation.PostConstruct
import jakarta.annotation.PreDestroy
@@ -53,6 +55,7 @@ class MasterdataDatabaseConfiguration(
FunktionaerTable,
QualifikationMasterTable,
FunktionaerQualifikationTable,
ReiterLizenzTable,
TurnierklasseTable,
LicenseTable,
RichtverfahrenTable,
@@ -101,6 +104,7 @@ class MasterdataTestDatabaseConfiguration {
FunktionaerTable,
QualifikationMasterTable,
FunktionaerQualifikationTable,
ReiterLizenzTable,
TurnierklasseTable,
LicenseTable,
RichtverfahrenTable,
@@ -0,0 +1,70 @@
-- V012__Reiter_Masterdata_Refactoring.sql
-- 1. Bestehende Master-Tabellen harmonisieren
-- Bundesland Tabelle erweitern (falls nötig)
ALTER TABLE bundesland ADD COLUMN IF NOT EXISTS bundesland_nr INT;
-- Reiter-Lizenzen (1:n Beziehung zu Reiter)
CREATE TABLE IF NOT EXISTS reiter_lizenz (
lizenz_id UUID PRIMARY KEY,
reiter_id UUID NOT NULL,
lizenz_typ VARCHAR(50) NOT NULL, -- STARTKARTE, REITERLIZENZ, FAHRLIZENZ
kuerzel VARCHAR(20) NOT NULL,
gueltig_bis DATE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- 2. Reiter-Tabelle anpassen
-- Redundante Spalten entfernen (werden nun über Person/Reiter-Identität/Verein bezogen)
ALTER TABLE reiter DROP COLUMN IF EXISTS image_url;
ALTER TABLE reiter DROP COLUMN IF EXISTS email;
ALTER TABLE reiter DROP COLUMN IF EXISTS telefon;
ALTER TABLE reiter DROP COLUMN IF EXISTS website;
ALTER TABLE reiter DROP COLUMN IF EXISTS strasse;
ALTER TABLE reiter DROP COLUMN IF EXISTS hausnummer;
ALTER TABLE reiter DROP COLUMN IF EXISTS plz;
ALTER TABLE reiter DROP COLUMN IF EXISTS ort;
ALTER TABLE reiter DROP COLUMN IF EXISTS bundesland;
-- Neue Fremdschlüssel-Spalten hinzufügen
ALTER TABLE reiter ADD COLUMN IF NOT EXISTS verein_id UUID;
ALTER TABLE reiter ADD COLUMN IF NOT EXISTS bundesland_id UUID;
ALTER TABLE reiter ADD COLUMN IF NOT EXISTS nation_id UUID;
-- Fremdschlüssel-Constraints
ALTER TABLE reiter ADD CONSTRAINT fk_reiter_verein FOREIGN KEY (verein_id) REFERENCES verein(verein_id);
ALTER TABLE reiter ADD CONSTRAINT fk_reiter_bundesland FOREIGN KEY (bundesland_id) REFERENCES bundesland(id);
ALTER TABLE reiter ADD CONSTRAINT fk_reiter_nation FOREIGN KEY (nation_id) REFERENCES land(id);
ALTER TABLE reiter ADD CONSTRAINT fk_reiter_lizenz_reiter FOREIGN KEY (reiter_id) REFERENCES reiter(reiter_id) ON DELETE CASCADE;
-- 3. Daten gemäß OEPS-Spezifikation korrigieren (für Österreich)
DO $$
DECLARE
austria_id UUID;
BEGIN
SELECT id INTO austria_id FROM land WHERE iso_alpha2_code = 'AT';
IF austria_id IS NOT NULL THEN
-- Bestehende Einträge löschen oder aktualisieren
-- Wir setzen die bundesland_nr gemäß User-Vorgabe:
-- 01=Wien, 02=NÖ, 03=Burgenland, 04=Steiermark, 05=Kärnten, 06=Oberösterreich, 07=Salzburg, 08=Tirol, 09=Vorarlberg, 00=Unbekannt
UPDATE bundesland SET bundesland_nr = 1, name = 'Wien', kuerzel = 'W' WHERE land_id = austria_id AND (oeps_code = '09' OR name = 'Wien');
UPDATE bundesland SET bundesland_nr = 2, name = 'Niederösterreich', kuerzel = '' WHERE land_id = austria_id AND (oeps_code = '03' OR name = 'Niederösterreich');
UPDATE bundesland SET bundesland_nr = 3, name = 'Burgenland', kuerzel = 'BGLD' WHERE land_id = austria_id AND (oeps_code = '01' OR name = 'Burgenland');
UPDATE bundesland SET bundesland_nr = 4, name = 'Steiermark', kuerzel = 'STMK' WHERE land_id = austria_id AND (oeps_code = '06' OR name = 'Steiermark');
UPDATE bundesland SET bundesland_nr = 5, name = 'Kärnten', kuerzel = 'KTN' WHERE land_id = austria_id AND (oeps_code = '02' OR name = 'Kärnten');
UPDATE bundesland SET bundesland_nr = 6, name = 'Oberösterreich', kuerzel = '' WHERE land_id = austria_id AND (oeps_code = '04' OR name = 'Oberösterreich');
UPDATE bundesland SET bundesland_nr = 7, name = 'Salzburg', kuerzel = 'SBG' WHERE land_id = austria_id AND (oeps_code = '05' OR name = 'Salzburg');
UPDATE bundesland SET bundesland_nr = 8, name = 'Tirol', kuerzel = 'T' WHERE land_id = austria_id AND (oeps_code = '07' OR name = 'Tirol');
UPDATE bundesland SET bundesland_nr = 9, name = 'Vorarlberg', kuerzel = 'VBG' WHERE land_id = austria_id AND (oeps_code = '08' OR name = 'Vorarlberg');
-- Fehlende "Unbekannt" hinzufügen
INSERT INTO bundesland (land_id, bundesland_nr, name, kuerzel, oeps_code)
VALUES (austria_id, 0, 'Unbekannt', 'UNK', '00')
ON CONFLICT DO NOTHING;
END IF;
END $$;