Mark A-2 as complete: Create domain hierarchy tables for events and tournaments, add Flyway migration script and tests for V2 schema; update roadmap with completed tasks.
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
-- Domain hierarchy for Events/Tournaments within a tenant schema
|
||||
-- This migration assumes each tenant schema represents one Veranstaltung (event).
|
||||
|
||||
-- veranstaltungen (singleton per tenant schema)
|
||||
CREATE TABLE IF NOT EXISTS veranstaltungen (
|
||||
id UUID PRIMARY KEY,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
-- turniere (tournaments) – per Veranstaltung
|
||||
CREATE TABLE IF NOT EXISTS turniere (
|
||||
id UUID PRIMARY KEY,
|
||||
veranstaltung_id UUID NOT NULL REFERENCES veranstaltungen(id) ON DELETE CASCADE,
|
||||
oeps_turniernummer VARCHAR(50) NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_turniere_oeps_nr ON turniere(oeps_turniernummer);
|
||||
CREATE INDEX IF NOT EXISTS idx_turniere_veranstaltung_id ON turniere(veranstaltung_id);
|
||||
|
||||
-- bewerbe (competitions) – per Turnier
|
||||
CREATE TABLE IF NOT EXISTS bewerbe (
|
||||
id UUID PRIMARY KEY,
|
||||
turnier_id UUID NOT NULL REFERENCES turniere(id) ON DELETE CASCADE,
|
||||
klasse VARCHAR(50) NOT NULL,
|
||||
hoehe_cm INTEGER NULL,
|
||||
bezeichnung TEXT NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_bewerbe_turnier_id ON bewerbe(turnier_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_bewerbe_klasse ON bewerbe(klasse);
|
||||
|
||||
-- abteilungen (sections/heats) – per Bewerb
|
||||
CREATE TABLE IF NOT EXISTS abteilungen (
|
||||
id UUID PRIMARY KEY,
|
||||
bewerb_id UUID NOT NULL REFERENCES bewerbe(id) ON DELETE CASCADE,
|
||||
nr INTEGER NOT NULL,
|
||||
bezeichnung TEXT NOT NULL,
|
||||
typ VARCHAR(32) NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
CONSTRAINT chk_abteilungen_typ CHECK (typ IN ('SEPARATE_SIEGEREHRUNG', 'ORGANISATORISCH'))
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_abteilungen_bewerb_nr ON abteilungen(bewerb_id, nr);
|
||||
CREATE INDEX IF NOT EXISTS idx_abteilungen_bewerb_id ON abteilungen(bewerb_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_abteilungen_typ ON abteilungen(typ);
|
||||
|
||||
-- teilnehmer_konten – aggregated balances across all tournaments of one Veranstaltung
|
||||
CREATE TABLE IF NOT EXISTS teilnehmer_konten (
|
||||
id UUID PRIMARY KEY,
|
||||
veranstaltung_id UUID NOT NULL REFERENCES veranstaltungen(id) ON DELETE CASCADE,
|
||||
teilnehmer_id UUID NOT NULL,
|
||||
saldo_cents BIGINT NOT NULL DEFAULT 0,
|
||||
currency CHAR(3) NOT NULL DEFAULT 'EUR',
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_tkonten_veranstaltung_teilnehmer ON teilnehmer_konten(veranstaltung_id, teilnehmer_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tkonten_veranstaltung_id ON teilnehmer_konten(veranstaltung_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tkonten_teilnehmer_id ON teilnehmer_konten(teilnehmer_id);
|
||||
|
||||
-- turnier_kassa – per tournament cash balance
|
||||
CREATE TABLE IF NOT EXISTS turnier_kassa (
|
||||
id UUID PRIMARY KEY,
|
||||
turnier_id UUID NOT NULL REFERENCES turniere(id) ON DELETE CASCADE,
|
||||
saldo_cents BIGINT NOT NULL DEFAULT 0,
|
||||
currency CHAR(3) NOT NULL DEFAULT 'EUR',
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_turnier_kassa_turnier ON turnier_kassa(turnier_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_turnier_kassa_turnier_id ON turnier_kassa(turnier_id);
|
||||
Reference in New Issue
Block a user