Veranstalter strikt von Lieferanten trennen
This commit is contained in:
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;
|
||||
Reference in new issue
Block a user