Password complexity: custom validator requiring uppercase, lowercase, digit (min 8 chars)
Token expiry: 90-day token lifetime with refresh endpoint (60-90 day renewal window)
Health check: /api/health/ now pings Postgres + Redis, returns 503 on failure
Audit logging: async audit_log table for auth events (login, register, delete, etc.)
Circuit breaker: APNs/FCM push sends wrapped with 5-failure threshold, 30s recovery
FK indexes: 27 missing foreign key indexes across all tables (migration 017)
CSP header: default-src 'none'; frame-ancestors 'none'
Gzip compression: level 5 with media endpoint skipper
Prometheus metrics: /metrics endpoint using existing monitoring service
External timeouts: 15s push, 30s SMTP, context timeouts on all external calls
Migrations: 016 (token created_at), 017 (FK indexes), 018 (audit_log)
Tests: circuit breaker (15), audit service (8), token refresh (7), health (4),
middleware expiry (5), validator (new)
41 lines
1.4 KiB
SQL
41 lines
1.4 KiB
SQL
-- Rollback: 017_fk_indexes
|
|
-- Drop all FK indexes added in the up migration.
|
|
|
|
-- auth / user tables
|
|
DROP INDEX IF EXISTS idx_authtoken_user_id;
|
|
DROP INDEX IF EXISTS idx_userprofile_user_id;
|
|
DROP INDEX IF EXISTS idx_confirmationcode_user_id;
|
|
DROP INDEX IF EXISTS idx_passwordresetcode_user_id;
|
|
DROP INDEX IF EXISTS idx_applesocialauth_user_id;
|
|
DROP INDEX IF EXISTS idx_googlesocialauth_user_id;
|
|
|
|
-- push notification device tables
|
|
DROP INDEX IF EXISTS idx_apnsdevice_user_id;
|
|
DROP INDEX IF EXISTS idx_gcmdevice_user_id;
|
|
|
|
-- notification tables
|
|
DROP INDEX IF EXISTS idx_notificationpreference_user_id;
|
|
|
|
-- subscription tables
|
|
DROP INDEX IF EXISTS idx_subscription_user_id;
|
|
|
|
-- residence tables
|
|
DROP INDEX IF EXISTS idx_residence_owner_id;
|
|
DROP INDEX IF EXISTS idx_sharecode_residence_id;
|
|
DROP INDEX IF EXISTS idx_sharecode_created_by_id;
|
|
|
|
-- task tables
|
|
DROP INDEX IF EXISTS idx_task_created_by_id;
|
|
DROP INDEX IF EXISTS idx_task_assigned_to_id;
|
|
DROP INDEX IF EXISTS idx_task_category_id;
|
|
DROP INDEX IF EXISTS idx_task_priority_id;
|
|
DROP INDEX IF EXISTS idx_task_frequency_id;
|
|
DROP INDEX IF EXISTS idx_task_contractor_id;
|
|
DROP INDEX IF EXISTS idx_task_parent_task_id;
|
|
DROP INDEX IF EXISTS idx_completionimage_completion_id;
|
|
DROP INDEX IF EXISTS idx_document_created_by_id;
|
|
DROP INDEX IF EXISTS idx_document_task_id;
|
|
DROP INDEX IF EXISTS idx_documentimage_document_id;
|
|
DROP INDEX IF EXISTS idx_contractor_residence_id;
|
|
DROP INDEX IF EXISTS idx_reminderlog_notification_id;
|