diff --git a/migrations/002_add_votes_index.sql b/migrations/002_add_votes_index.sql index e69de29..e1da274 100644 --- a/migrations/002_add_votes_index.sql +++ b/migrations/002_add_votes_index.sql @@ -0,0 +1,48 @@ +-- ===================================================================== +-- WebGIS Citizen Participation Portal +-- Migration: 002_add_votes_index.sql +-- Description: Adds missing Index on votes.contribution_id for fast +-- Vote Lookups per Contribution. +-- ===================================================================== + + +-- --------------------------------------------------------------------- +-- Block 1: Index for fast Queries +-- The UNIQUE Constraint on contribution_id and voter_name creates a +-- composite Index, but Queries filtering only by contribution_id +-- cannot use it efficiently. This single-column Index covers that Case. +-- --------------------------------------------------------------------- +CREATE INDEX votes_contribution_idx ON votes (contribution_id); + + +-- ===================================================================== +-- ToDo's for future Migrations +-- ===================================================================== +-- +-- 1. Categories Table +-- Create a "categories" Table with municipality_id, slug, label, +-- icon (FontAwesome), color, and sort_order. Replace the free-text +-- "category" Column in Contributions with a Foreign Key Reference. +-- This prevents Typos and inconsistent Category Names, and allows +-- each Municipality to define its own Set of Categories. +-- +-- 2. Soft Delete +-- Add "deleted_at TIMESTAMPTZ DEFAULT NULL" to Contributions. +-- Instead of DELETE, set deleted_at = NOW(). Filter all Queries +-- with "WHERE deleted_at IS NULL". Allows Moderation Audit Trail +-- and accidental Deletion Recovery. +-- +-- 3. Audit Log +-- Create an "audit_log" Table recording who changed what and when. +-- Columns: audit_id, table_name, record_id, action (insert/update/ +-- delete), changed_by, old_values (JSONB), new_values (JSONB), +-- created_at. Populate via Triggers on Contributions and Votes. +-- +-- 4. Geometry Validation +-- Add CHECK Constraint "ST_IsValid(geom)" on Contributions, or +-- validate in the API Layer before Insert. Prevents self-crossing +-- Polygons and other invalid Geometries. +-- +-- ===================================================================== +-- End of migration 002_add_votes_index.sql +-- ===================================================================== \ No newline at end of file