Veranstalter am Markt verankern

This commit is contained in:
gitea_admin committed 2026-09-20 10:57:40 +02:00
1 parent ba36485180
commit 0e71aca89b
10 files changed
+271 -106

No files matched your search

@@ -0,0 +1,66 @@
BEGIN;
ALTER TABLE party_role
DROP CONSTRAINT chk_party_role_code;
ALTER TABLE party_role
ADD CONSTRAINT chk_party_role_code
CHECK (role_code IN ('manufacturer', 'market_organizer'));
ALTER TABLE market_definition
ADD COLUMN organizer_party_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 $$;
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;
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;
ALTER TABLE market_occurrence_organizer
ADD COLUMN contact_person_name TEXT,
ADD COLUMN contact_email TEXT,
ADD COLUMN contact_phone TEXT;
UPDATE market_occurrence_organizer oo
SET contact_person_name = NULLIF(TRIM(CONCAT_WS(' ', c.first_name, c.last_name)), ''),
contact_email = c.email,
contact_phone = c.phone
FROM contact c
WHERE c.id = oo.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
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;