diff --git a/backend/fix_migrations.bat b/backend/fix_migrations.bat new file mode 100644 index 0000000..c572a88 --- /dev/null +++ b/backend/fix_migrations.bat @@ -0,0 +1,24 @@ +@echo off +REM Fix all migrations to include uuid-ossp extension + +echo Fixing migrations to include uuid-ossp extension... + +REM List of migrations that need the fix (excluding init) +set migrations=20260221151200_add_notifications_and_action_logs.sql 20260224153500_add_nonces.sql 20260226000000_add_lending_events.sql 20260226140000_create_user_2fa.sql 20260324120000_add_emergency_access_tracking.sql 20260324170000_add_emergency_contacts.sql 20260324173000_add_emergency_access_audit_logs.sql 20260324180000_add_emergency_access_risk_alerts.sql 20260325100000_add_pools_for_stress_testing.sql 20260325103000_add_governance_tables.sql 20260325190000_add_emergency_access_sessions.sql + +for %%f in (%migrations%) do ( + echo Checking migrations\%%f + findstr /C:"CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"" migrations\%%f >nul + if errorlevel 1 ( + echo Adding extension to %%f + echo -- Ensure UUID extension is available> temp.sql + echo CREATE EXTENSION IF NOT EXISTS "uuid-ossp";>> temp.sql + echo.>> temp.sql + type migrations\%%f >> temp.sql + move /Y temp.sql migrations\%%f >nul + ) else ( + echo %%f already has extension + ) +) + +echo Done! diff --git a/backend/migrations/20260221120000_add_plans_and_logs.sql b/backend/migrations/20260221120000_add_plans_and_logs.sql index e9f57e1..2256661 100644 --- a/backend/migrations/20260221120000_add_plans_and_logs.sql +++ b/backend/migrations/20260221120000_add_plans_and_logs.sql @@ -1,20 +1,15 @@ --- Migration: Add plans and plan_logs tables - -CREATE TABLE plans ( - id SERIAL PRIMARY KEY, - user_id INTEGER NOT NULL, - amount NUMERIC(20, 6) NOT NULL, - fee NUMERIC(20, 6) NOT NULL, - net_amount NUMERIC(20, 6) NOT NULL, - status VARCHAR(32) NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT NOW(), - updated_at TIMESTAMP NOT NULL DEFAULT NOW() -); +-- Migration: Add plan_logs table +-- NOTE: +-- The plans table is already created in the initial migration. +-- This migration should only add the dependent plan_logs table. CREATE TABLE plan_logs ( id SERIAL PRIMARY KEY, - plan_id INTEGER NOT NULL REFERENCES plans(id), + plan_id UUID NOT NULL REFERENCES plans(id) ON DELETE CASCADE, action VARCHAR(64) NOT NULL, - performed_by INTEGER NOT NULL, - timestamp TIMESTAMP NOT NULL DEFAULT NOW() + performed_by UUID NOT NULL, + timestamp TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); + +CREATE INDEX idx_plan_logs_plan_id ON plan_logs(plan_id); +CREATE INDEX idx_plan_logs_performed_by ON plan_logs(performed_by); \ No newline at end of file diff --git a/backend/migrations/20260223000000_add_claim_plan_unique_constraint.sql b/backend/migrations/20260223000000_add_claim_plan_unique_constraint.sql index 95e6e20..6b51c78 100644 --- a/backend/migrations/20260223000000_add_claim_plan_unique_constraint.sql +++ b/backend/migrations/20260223000000_add_claim_plan_unique_constraint.sql @@ -1,12 +1,12 @@ -- Add unique constraint on plan_id in claims table to prevent duplicate claims -- This ensures only one claim per plan, preventing race condition vulnerabilities --- First, remove any existing duplicate claims (keep the first one) +-- First, remove any existing duplicate claims (keep the first one by created_at) DELETE FROM claims WHERE id NOT IN ( - SELECT MIN(id) + SELECT DISTINCT ON (plan_id) id FROM claims - GROUP BY plan_id + ORDER BY plan_id, created_at ASC ); -- Drop the existing unique constraint on (plan_id, beneficiary_email) diff --git a/backend/migrations/20260224153500_add_nonces.sql b/backend/migrations/20260224153500_add_nonces.sql index 843c109..0fb3321 100644 Binary files a/backend/migrations/20260224153500_add_nonces.sql and b/backend/migrations/20260224153500_add_nonces.sql differ diff --git a/backend/migrations/20260226000000_add_lending_events.sql b/backend/migrations/20260226000000_add_lending_events.sql index 792b615..c13458d 100644 Binary files a/backend/migrations/20260226000000_add_lending_events.sql and b/backend/migrations/20260226000000_add_lending_events.sql differ diff --git a/backend/migrations/20260226140000_create_user_2fa.sql b/backend/migrations/20260226140000_create_user_2fa.sql index 9b2f56b..e72a4f0 100644 Binary files a/backend/migrations/20260226140000_create_user_2fa.sql and b/backend/migrations/20260226140000_create_user_2fa.sql differ diff --git a/backend/migrations/20260324120000_add_emergency_access_tracking.sql b/backend/migrations/20260324120000_add_emergency_access_tracking.sql index d7e3d0d..11a9a38 100644 Binary files a/backend/migrations/20260324120000_add_emergency_access_tracking.sql and b/backend/migrations/20260324120000_add_emergency_access_tracking.sql differ diff --git a/backend/migrations/20260324170000_add_emergency_contacts.sql b/backend/migrations/20260324170000_add_emergency_contacts.sql index 79b3b16..dc9cc19 100644 Binary files a/backend/migrations/20260324170000_add_emergency_contacts.sql and b/backend/migrations/20260324170000_add_emergency_contacts.sql differ diff --git a/backend/migrations/20260324173000_add_emergency_access_audit_logs.sql b/backend/migrations/20260324173000_add_emergency_access_audit_logs.sql index 74fe8fa..90b78be 100644 Binary files a/backend/migrations/20260324173000_add_emergency_access_audit_logs.sql and b/backend/migrations/20260324173000_add_emergency_access_audit_logs.sql differ diff --git a/backend/migrations/20260324180000_add_emergency_access_risk_alerts.sql b/backend/migrations/20260324180000_add_emergency_access_risk_alerts.sql index d896b10..7e9a237 100644 Binary files a/backend/migrations/20260324180000_add_emergency_access_risk_alerts.sql and b/backend/migrations/20260324180000_add_emergency_access_risk_alerts.sql differ diff --git a/backend/migrations/20260325100000_add_pools_for_stress_testing.sql b/backend/migrations/20260325100000_add_pools_for_stress_testing.sql index bf01d27..9f233b8 100644 Binary files a/backend/migrations/20260325100000_add_pools_for_stress_testing.sql and b/backend/migrations/20260325100000_add_pools_for_stress_testing.sql differ diff --git a/backend/migrations/20260325103000_add_governance_tables.sql b/backend/migrations/20260325103000_add_governance_tables.sql index c3da3e2..711e272 100644 Binary files a/backend/migrations/20260325103000_add_governance_tables.sql and b/backend/migrations/20260325103000_add_governance_tables.sql differ diff --git a/backend/migrations/20260325190000_add_emergency_access_sessions.sql b/backend/migrations/20260325190000_add_emergency_access_sessions.sql index bece499..b63be94 100644 Binary files a/backend/migrations/20260325190000_add_emergency_access_sessions.sql and b/backend/migrations/20260325190000_add_emergency_access_sessions.sql differ diff --git a/backend/migrations/20260326000000_add_will_document_status.sql b/backend/migrations/20260326010000_add_will_document_status.sql similarity index 100% rename from backend/migrations/20260326000000_add_will_document_status.sql rename to backend/migrations/20260326010000_add_will_document_status.sql diff --git a/backend/migrations/20260326000000_add_will_witnesses.sql b/backend/migrations/20260326020000_add_will_witnesses.sql similarity index 100% rename from backend/migrations/20260326000000_add_will_witnesses.sql rename to backend/migrations/20260326020000_add_will_witnesses.sql diff --git a/backend/migrations/20260326000000_add_document_encryption_and_backups.sql b/backend/migrations/20260326030000_add_document_encryption_and_backups.sql similarity index 100% rename from backend/migrations/20260326000000_add_document_encryption_and_backups.sql rename to backend/migrations/20260326030000_add_document_encryption_and_backups.sql diff --git a/backend/migrations/20260328000000_add_legacy_content_uploads.sql b/backend/migrations/20260328010000_add_legacy_content_uploads.sql similarity index 100% rename from backend/migrations/20260328000000_add_legacy_content_uploads.sql rename to backend/migrations/20260328010000_add_legacy_content_uploads.sql diff --git a/backend/migrations/20260328000000_add_vault_id_to_legacy_messages.sql b/backend/migrations/20260328020000_add_vault_id_to_legacy_messages.sql similarity index 100% rename from backend/migrations/20260328000000_add_vault_id_to_legacy_messages.sql rename to backend/migrations/20260328020000_add_vault_id_to_legacy_messages.sql diff --git a/backend/tests/helpers/mod.rs b/backend/tests/helpers/mod.rs index 71b580c..5738721 100644 --- a/backend/tests/helpers/mod.rs +++ b/backend/tests/helpers/mod.rs @@ -63,7 +63,7 @@ impl TestContext { let expires_at = chrono::Utc::now() + chrono::Duration::minutes(5); sqlx::query( - "INSERT INTO user_2fa (user_id, otp_hash, expires_at) VALUES ($1, $2, $3) ON CONFLICT (user_id) DO UPDATE SET otp_hash = $2, expires_at = $3" + "INSERT INTO user_2fa (user_id, otp_hash, expires_at) VALUES ($1, $2, $3) ON CONFLICT (user_id) DO UPDATE SET otp_hash = $2, expires_at = $3", ) .bind(user_id) .bind(otp_hash) @@ -82,7 +82,7 @@ pub async fn create_test_user(pool: &PgPool, email: &str) -> sqlx::Result sqlx::Result