Veranstalter am Markt verankern
This commit is contained in:
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;
|
||||
Reference in new issue
Block a user