Files
Investidor-V2/database/migrations/2026_09_24_013000_investmoz_triggers.php
T
nala 250ac35fd1
tests / ci (push) Canceled after 0s
first commit
2026-09-28 10:01:09 +02:00

391 lines
14 KiB
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
// Laravel's migration ledger provides idempotency; object drift fails explicitly.
public function up(): void
{
if (DB::connection()->getDriverName() !== 'pgsql') {
throw new RuntimeException('InvestMoz requires PostgreSQL with PostGIS. Use the isolated pgsql test environment.');
}
DB::statement(<<<'SQL'
CREATE TRIGGER imz_organizations_updated BEFORE UPDATE ON public.organizations FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_memberships_updated BEFORE UPDATE ON public.memberships FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_consents_updated BEFORE UPDATE ON public.consents FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_documents_updated BEFORE UPDATE ON public.documents FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_geo_locations_updated BEFORE UPDATE ON public.geo_locations FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_geo_geometries_updated BEFORE UPDATE ON public.geo_geometries FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_projects_updated BEFORE UPDATE ON public.projects FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_project_locations_updated BEFORE UPDATE ON public.project_locations FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_economic_clusters_updated BEFORE UPDATE ON public.economic_clusters FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_value_chains_updated BEFORE UPDATE ON public.value_chains FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_value_chain_links_updated BEFORE UPDATE ON public.value_chain_links FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_cluster_projects_updated BEFORE UPDATE ON public.cluster_projects FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_anchor_project_links_updated BEFORE UPDATE ON public.anchor_project_links FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_complementary_project_links_updated BEFORE UPDATE ON public.complementary_project_links FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_development_corridors_updated BEFORE UPDATE ON public.development_corridors FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_corridor_locations_updated BEFORE UPDATE ON public.corridor_locations FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_corridor_projects_updated BEFORE UPDATE ON public.corridor_projects FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_corridor_clusters_updated BEFORE UPDATE ON public.corridor_clusters FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_investors_updated BEFORE UPDATE ON public.investors FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_contacts_updated BEFORE UPDATE ON public.contacts FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_investor_contacts_updated BEFORE UPDATE ON public.investor_contacts FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_leads_updated BEFORE UPDATE ON public.leads FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_crm_opportunities_updated BEFORE UPDATE ON public.crm_opportunities FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_activities_updated BEFORE UPDATE ON public.activities FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_tasks_updated BEFORE UPDATE ON public.tasks FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_investor_journeys_updated BEFORE UPDATE ON public.investor_journeys FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_journey_steps_updated BEFORE UPDATE ON public.journey_steps FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_submissions_updated BEFORE UPDATE ON public.submissions FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_aftercare_plans_updated BEFORE UPDATE ON public.aftercare_plans FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_constraints_updated BEFORE UPDATE ON public.constraints FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_escalations_updated BEFORE UPDATE ON public.escalations FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_skills_updated BEFORE UPDATE ON public.skills FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_occupations_updated BEFORE UPDATE ON public.occupations FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_training_needs_updated BEFORE UPDATE ON public.training_needs FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_training_providers_updated BEFORE UPDATE ON public.training_providers FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_courses_updated BEFORE UPDATE ON public.courses FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_education_opportunities_updated BEFORE UPDATE ON public.education_opportunities FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_outbox_events_updated BEFORE UPDATE ON public.outbox_events FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_inbox_events_updated BEFORE UPDATE ON public.inbox_events FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_sync_runs_updated BEFORE UPDATE ON public.sync_runs FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_reconciliation_issues_updated BEFORE UPDATE ON public.reconciliation_issues FOR EACH ROW EXECUTE FUNCTION public.investmoz_set_updated_at();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_audit_events_immutable BEFORE UPDATE OR DELETE OR TRUNCATE ON public.audit_events FOR EACH STATEMENT EXECUTE FUNCTION public.investmoz_reject_audit_change();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_outbox_events_envelope BEFORE UPDATE OR DELETE ON public.outbox_events FOR EACH ROW EXECUTE FUNCTION public.investmoz_protect_event_envelope();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_outbox_events_no_truncate BEFORE TRUNCATE ON public.outbox_events FOR EACH STATEMENT EXECUTE FUNCTION public.investmoz_reject_audit_change();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_inbox_events_envelope BEFORE UPDATE OR DELETE ON public.inbox_events FOR EACH ROW EXECUTE FUNCTION public.investmoz_protect_event_envelope();
SQL);
DB::statement(<<<'SQL'
CREATE TRIGGER imz_inbox_events_no_truncate BEFORE TRUNCATE ON public.inbox_events FOR EACH STATEMENT EXECUTE FUNCTION public.investmoz_reject_audit_change();
SQL);
}
public function down(): void
{
if (DB::connection()->getDriverName() !== 'pgsql') {
throw new RuntimeException('InvestMoz rollback requires PostgreSQL.');
}
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_inbox_events_no_truncate ON public.inbox_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_inbox_events_envelope ON public.inbox_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_outbox_events_no_truncate ON public.outbox_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_outbox_events_envelope ON public.outbox_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_audit_events_immutable ON public.audit_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_reconciliation_issues_updated ON public.reconciliation_issues RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_sync_runs_updated ON public.sync_runs RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_inbox_events_updated ON public.inbox_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_outbox_events_updated ON public.outbox_events RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_education_opportunities_updated ON public.education_opportunities RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_courses_updated ON public.courses RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_training_providers_updated ON public.training_providers RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_training_needs_updated ON public.training_needs RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_occupations_updated ON public.occupations RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_skills_updated ON public.skills RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_escalations_updated ON public.escalations RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_constraints_updated ON public.constraints RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_aftercare_plans_updated ON public.aftercare_plans RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_submissions_updated ON public.submissions RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_journey_steps_updated ON public.journey_steps RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_investor_journeys_updated ON public.investor_journeys RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_tasks_updated ON public.tasks RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_activities_updated ON public.activities RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_crm_opportunities_updated ON public.crm_opportunities RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_leads_updated ON public.leads RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_investor_contacts_updated ON public.investor_contacts RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_contacts_updated ON public.contacts RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_investors_updated ON public.investors RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_corridor_clusters_updated ON public.corridor_clusters RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_corridor_projects_updated ON public.corridor_projects RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_corridor_locations_updated ON public.corridor_locations RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_development_corridors_updated ON public.development_corridors RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_complementary_project_links_updated ON public.complementary_project_links RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_anchor_project_links_updated ON public.anchor_project_links RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_cluster_projects_updated ON public.cluster_projects RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_value_chain_links_updated ON public.value_chain_links RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_value_chains_updated ON public.value_chains RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_economic_clusters_updated ON public.economic_clusters RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_project_locations_updated ON public.project_locations RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_projects_updated ON public.projects RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_geo_geometries_updated ON public.geo_geometries RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_geo_locations_updated ON public.geo_locations RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_documents_updated ON public.documents RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_consents_updated ON public.consents RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_memberships_updated ON public.memberships RESTRICT;
SQL);
DB::statement(<<<'SQL'
DROP TRIGGER IF EXISTS imz_organizations_updated ON public.organizations RESTRICT;
SQL);
}
};