from migrations.fixtures.delphi_tables.v8.triggers.base_trigger import BaseTrigger, TriggerType class ConnectorTrigger(BaseTrigger): table = "Connector" function_name = "log_connectors_changes" type = TriggerType.ROW.value def on_insert(self): return f""" INSERT INTO connectors(id, schema_name, user_id, platform, date_created, decibel_label_id, is_active, manager, last_sync_at) SELECT connector.external_id AS id, connector.name AS schema_name, connector.owner_id AS user_id, connector.platform AS platform, connector.created_at :: DATE AS date_created, connector.label_id AS decibel_label_id, CASE WHEN connector.status = 1 THEN TRUE ELSE FALSE END is_active, manager.email AS manager, connector.last_synced_at AS last_sync_at FROM "Connector" connector JOIN "User" owner ON connector.owner_id = owner.id LEFT JOIN "User" manager ON owner.manager_id = manager.id WHERE connector.id = NEW.id ON CONFLICT DO NOTHING; """ def on_update(self): return """ IF NEW.status = 1 THEN UPDATE connectors SET is_active = TRUE WHERE id = NEW.external_id; ELSIF NEW.status != 1 THEN UPDATE connectors SET is_active = FALSE WHERE id = NEW.external_id; END IF; IF NEW.last_synced_at != OLD.last_synced_at THEN UPDATE connectors SET last_sync_at = NEW.last_synced_at WHERE id = NEW.external_id; END IF; """ def on_delete(self): return f""" DELETE FROM connectors WHERE id = OLD.external_id; DELETE FROM ads_accounts WHERE connector_id = OLD.external_id; """