Veranstalter strikt von Lieferanten trennen

This commit is contained in:
gitea_admin committed 2026-09-20 11:04:13 +02:00
1 parent 0e71aca89b
commit 36fb17ac32
9 files changed
+114 -152

No files matched your search

@@ -1,44 +1,33 @@
BEGIN;
ALTER TABLE party_role
DROP CONSTRAINT chk_party_role_code;
CREATE TABLE market_organizer (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT,
phone TEXT,
status TEXT NOT NULL DEFAULT 'active',
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
CONSTRAINT chk_market_organizer_status CHECK (status IN ('active', 'inactive'))
);
ALTER TABLE party_role
ADD CONSTRAINT chk_party_role_code
CHECK (role_code IN ('manufacturer', 'market_organizer'));
CREATE UNIQUE INDEX uq_market_organizer_name ON market_organizer (LOWER(TRIM(name)));
INSERT INTO market_organizer (name)
VALUES ('Beispielveranstalter 1');
ALTER TABLE market_definition
ADD COLUMN organizer_party_id BIGINT;
ADD COLUMN organizer_id BIGINT;
UPDATE market_definition m
SET organizer_party_id = source.organization_contact_id
FROM (
SELECT o.market_definition_id, MIN(oo.organization_contact_id) AS organization_contact_id
FROM market_occurrence o
INNER JOIN market_occurrence_organizer oo ON oo.occurrence_id = o.id
GROUP BY o.market_definition_id
) source
WHERE source.market_definition_id = m.id;
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM market_definition WHERE organizer_party_id IS NULL) THEN
RAISE EXCEPTION 'Alle bestehenden Märkte benötigen vor der Migration einen Veranstalter.';
END IF;
END $$;
UPDATE market_definition
SET organizer_id = (SELECT id FROM market_organizer WHERE name = 'Beispielveranstalter 1');
ALTER TABLE market_definition
ALTER COLUMN organizer_party_id SET NOT NULL,
ADD CONSTRAINT fk_market_definition_organizer_party
FOREIGN KEY (organizer_party_id) REFERENCES party(id) ON DELETE RESTRICT;
ALTER COLUMN organizer_id SET NOT NULL,
ADD CONSTRAINT fk_market_definition_organizer
FOREIGN KEY (organizer_id) REFERENCES market_organizer(id) ON DELETE RESTRICT;
CREATE INDEX idx_market_definition_organizer_party
ON market_definition(organizer_party_id);
INSERT INTO party_role (party_id, role_code)
SELECT DISTINCT organizer_party_id, 'market_organizer'
FROM market_definition
ON CONFLICT (party_id, role_code) DO NOTHING;
CREATE INDEX idx_market_definition_organizer ON market_definition (organizer_id);
ALTER TABLE market_occurrence_organizer
ADD COLUMN contact_person_name TEXT,
@@ -52,6 +41,10 @@ SET contact_person_name = NULLIF(TRIM(CONCAT_WS(' ', c.first_name, c.last_name))
FROM contact c
WHERE c.id = oo.contact_person_id;
ALTER TABLE market_occurrence_organizer
DROP COLUMN organization_contact_id,
DROP COLUMN contact_person_id;
INSERT INTO market_occurrence_organizer (occurrence_id, contact_person_name, created_at, updated_at)
SELECT o.id, NULL, NOW(), NOW()
FROM market_occurrence o
@@ -59,8 +52,4 @@ WHERE NOT EXISTS (
SELECT 1 FROM market_occurrence_organizer oo WHERE oo.occurrence_id = o.id
);
ALTER TABLE market_occurrence_organizer
DROP COLUMN organization_contact_id,
DROP COLUMN contact_person_id;
COMMIT;