364 lines
11 KiB
JSON
364 lines
11 KiB
JSON
{
|
|
"schemas": [
|
|
"public"
|
|
],
|
|
"framework_owned_objects": [
|
|
"migrations (Laravel)"
|
|
],
|
|
"extension_owned_objects": "Objectos PostGIS pertencem à extensão; não são duplicados no dicionário aplicacional.",
|
|
"extensions": [
|
|
"postgis",
|
|
"pgcrypto"
|
|
],
|
|
"functions": [
|
|
"CREATE OR REPLACE FUNCTION public.investmoz_set_updated_at() RETURNS trigger\nLANGUAGE plpgsql SET search_path = pg_catalog, public AS $$\nBEGIN\n NEW.updated_at = CURRENT_TIMESTAMP;\n RETURN NEW;\nEND;\n$$;",
|
|
"CREATE OR REPLACE FUNCTION public.investmoz_reject_audit_change() RETURNS trigger\nLANGUAGE plpgsql SET search_path = pg_catalog, public AS $$\nBEGIN\n RAISE EXCEPTION 'InvestMoz audit_events is append-only' USING ERRCODE = '42501';\nEND;\n$$;",
|
|
"CREATE OR REPLACE FUNCTION public.investmoz_protect_event_envelope() RETURNS trigger\nLANGUAGE plpgsql SET search_path = pg_catalog, public AS $$\nBEGIN\n IF TG_OP = 'DELETE' THEN\n RAISE EXCEPTION 'InvestMoz event deletion requires a reviewed retention migration' USING ERRCODE = '42501';\n END IF;\n IF (to_jsonb(NEW) - ARRAY['status','updated_at','published_at','processed_at','available_at'])\n IS DISTINCT FROM\n (to_jsonb(OLD) - ARRAY['status','updated_at','published_at','processed_at','available_at']) THEN\n RAISE EXCEPTION 'InvestMoz event envelope is immutable' USING ERRCODE = '42501';\n END IF;\n RETURN NEW;\nEND;\n$$;"
|
|
],
|
|
"triggers": [
|
|
{
|
|
"name": "imz_organizations_updated",
|
|
"table": "organizations",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_memberships_updated",
|
|
"table": "memberships",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_consents_updated",
|
|
"table": "consents",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_documents_updated",
|
|
"table": "documents",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_geo_locations_updated",
|
|
"table": "geo_locations",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_geo_geometries_updated",
|
|
"table": "geo_geometries",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_projects_updated",
|
|
"table": "projects",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_project_locations_updated",
|
|
"table": "project_locations",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_economic_clusters_updated",
|
|
"table": "economic_clusters",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_value_chains_updated",
|
|
"table": "value_chains",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_value_chain_links_updated",
|
|
"table": "value_chain_links",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_cluster_projects_updated",
|
|
"table": "cluster_projects",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_anchor_project_links_updated",
|
|
"table": "anchor_project_links",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_complementary_project_links_updated",
|
|
"table": "complementary_project_links",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_development_corridors_updated",
|
|
"table": "development_corridors",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_corridor_locations_updated",
|
|
"table": "corridor_locations",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_corridor_projects_updated",
|
|
"table": "corridor_projects",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_corridor_clusters_updated",
|
|
"table": "corridor_clusters",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_investors_updated",
|
|
"table": "investors",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_contacts_updated",
|
|
"table": "contacts",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_investor_contacts_updated",
|
|
"table": "investor_contacts",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_leads_updated",
|
|
"table": "leads",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_crm_opportunities_updated",
|
|
"table": "crm_opportunities",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_activities_updated",
|
|
"table": "activities",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_tasks_updated",
|
|
"table": "tasks",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_investor_journeys_updated",
|
|
"table": "investor_journeys",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_journey_steps_updated",
|
|
"table": "journey_steps",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_submissions_updated",
|
|
"table": "submissions",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_aftercare_plans_updated",
|
|
"table": "aftercare_plans",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_constraints_updated",
|
|
"table": "constraints",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_escalations_updated",
|
|
"table": "escalations",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_skills_updated",
|
|
"table": "skills",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_occupations_updated",
|
|
"table": "occupations",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_training_needs_updated",
|
|
"table": "training_needs",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_training_providers_updated",
|
|
"table": "training_providers",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_courses_updated",
|
|
"table": "courses",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_education_opportunities_updated",
|
|
"table": "education_opportunities",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_outbox_events_updated",
|
|
"table": "outbox_events",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_inbox_events_updated",
|
|
"table": "inbox_events",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_sync_runs_updated",
|
|
"table": "sync_runs",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_reconciliation_issues_updated",
|
|
"table": "reconciliation_issues",
|
|
"event": "BEFORE UPDATE",
|
|
"function": "investmoz_set_updated_at",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_audit_events_immutable",
|
|
"table": "audit_events",
|
|
"event": "BEFORE UPDATE OR DELETE OR TRUNCATE",
|
|
"function": "investmoz_reject_audit_change",
|
|
"level": "STATEMENT"
|
|
},
|
|
{
|
|
"name": "imz_outbox_events_envelope",
|
|
"table": "outbox_events",
|
|
"event": "BEFORE UPDATE OR DELETE",
|
|
"function": "investmoz_protect_event_envelope",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_outbox_events_no_truncate",
|
|
"table": "outbox_events",
|
|
"event": "BEFORE TRUNCATE",
|
|
"function": "investmoz_reject_audit_change",
|
|
"level": "STATEMENT"
|
|
},
|
|
{
|
|
"name": "imz_inbox_events_envelope",
|
|
"table": "inbox_events",
|
|
"event": "BEFORE UPDATE OR DELETE",
|
|
"function": "investmoz_protect_event_envelope",
|
|
"level": "ROW"
|
|
},
|
|
{
|
|
"name": "imz_inbox_events_no_truncate",
|
|
"table": "inbox_events",
|
|
"event": "BEFORE TRUNCATE",
|
|
"function": "investmoz_reject_audit_change",
|
|
"level": "STATEMENT"
|
|
}
|
|
],
|
|
"views": [],
|
|
"materialized_views": [],
|
|
"custom_enums": [],
|
|
"generated_columns": [],
|
|
"sequences": [
|
|
"users_id_seq",
|
|
"jobs_id_seq",
|
|
"failed_jobs_id_seq",
|
|
"passkeys_id_seq",
|
|
"sectors_id_seq",
|
|
"opportunities_id_seq",
|
|
"interest_requests_id_seq"
|
|
],
|
|
"security_policies": [],
|
|
"audit": "append-only; writers must not own the tables or possess DDL privileges",
|
|
"logical_links_without_fk": [
|
|
"sessions.user_id -> users.id",
|
|
"password_reset_tokens.email -> users.email",
|
|
"audit_events.entity_type/entity_id",
|
|
"outbox_events.aggregate_type/aggregate_id"
|
|
]
|
|
}
|