Files
membership-be/migrations/complete_fix.sql
2025-12-10 17:52:32 +07:00

162 lines
5.4 KiB
SQL

-- Complete Fix for Sprint 1-3 Migration
-- Safe to run multiple times
-- ==============================================
-- Step 1: Add columns to users table
-- ==============================================
DO $$
BEGIN
-- Add profile_photo_url
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'profile_photo_url'
) THEN
ALTER TABLE users ADD COLUMN profile_photo_url VARCHAR;
RAISE NOTICE 'Added profile_photo_url to users table';
ELSE
RAISE NOTICE 'profile_photo_url already exists in users table';
END IF;
-- Add social_media_facebook
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'social_media_facebook'
) THEN
ALTER TABLE users ADD COLUMN social_media_facebook VARCHAR;
RAISE NOTICE 'Added social_media_facebook to users table';
ELSE
RAISE NOTICE 'social_media_facebook already exists in users table';
END IF;
-- Add social_media_instagram
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'social_media_instagram'
) THEN
ALTER TABLE users ADD COLUMN social_media_instagram VARCHAR;
RAISE NOTICE 'Added social_media_instagram to users table';
ELSE
RAISE NOTICE 'social_media_instagram already exists in users table';
END IF;
-- Add social_media_twitter
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'social_media_twitter'
) THEN
ALTER TABLE users ADD COLUMN social_media_twitter VARCHAR;
RAISE NOTICE 'Added social_media_twitter to users table';
ELSE
RAISE NOTICE 'social_media_twitter already exists in users table';
END IF;
-- Add social_media_linkedin
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'social_media_linkedin'
) THEN
ALTER TABLE users ADD COLUMN social_media_linkedin VARCHAR;
RAISE NOTICE 'Added social_media_linkedin to users table';
ELSE
RAISE NOTICE 'social_media_linkedin already exists in users table';
END IF;
END $$;
-- ==============================================
-- Step 2: Add columns to events table
-- ==============================================
DO $$
BEGIN
-- Add microsoft_calendar_id
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'events' AND column_name = 'microsoft_calendar_id'
) THEN
ALTER TABLE events ADD COLUMN microsoft_calendar_id VARCHAR;
RAISE NOTICE 'Added microsoft_calendar_id to events table';
ELSE
RAISE NOTICE 'microsoft_calendar_id already exists in events table';
END IF;
-- Add microsoft_calendar_sync_enabled
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'events' AND column_name = 'microsoft_calendar_sync_enabled'
) THEN
ALTER TABLE events ADD COLUMN microsoft_calendar_sync_enabled BOOLEAN DEFAULT FALSE;
RAISE NOTICE 'Added microsoft_calendar_sync_enabled to events table';
ELSE
RAISE NOTICE 'microsoft_calendar_sync_enabled already exists in events table';
END IF;
END $$;
-- ==============================================
-- Step 3: Fix storage_usage initialization
-- ==============================================
-- Delete any incomplete records
DELETE FROM storage_usage WHERE id IS NULL;
-- Insert initial record if table is empty
INSERT INTO storage_usage (id, total_bytes_used, max_bytes_allowed, last_updated)
SELECT
gen_random_uuid(),
0,
10737418240, -- 10GB default
CURRENT_TIMESTAMP
WHERE NOT EXISTS (SELECT 1 FROM storage_usage);
-- ==============================================
-- Step 4: Verify everything
-- ==============================================
DO $$
DECLARE
user_col_count INT;
event_col_count INT;
storage_count INT;
BEGIN
-- Count users columns
SELECT COUNT(*) INTO user_col_count
FROM information_schema.columns
WHERE table_name = 'users'
AND column_name IN (
'profile_photo_url',
'social_media_facebook',
'social_media_instagram',
'social_media_twitter',
'social_media_linkedin'
);
-- Count events columns
SELECT COUNT(*) INTO event_col_count
FROM information_schema.columns
WHERE table_name = 'events'
AND column_name IN (
'microsoft_calendar_id',
'microsoft_calendar_sync_enabled'
);
-- Count storage_usage records
SELECT COUNT(*) INTO storage_count FROM storage_usage;
-- Report results
RAISE NOTICE '';
RAISE NOTICE '========================================';
RAISE NOTICE 'Migration Verification Results:';
RAISE NOTICE '========================================';
RAISE NOTICE 'Users table: %/5 columns added', user_col_count;
RAISE NOTICE 'Events table: %/2 columns added', event_col_count;
RAISE NOTICE 'Storage usage: % record(s)', storage_count;
RAISE NOTICE '';
IF user_col_count = 5 AND event_col_count = 2 AND storage_count > 0 THEN
RAISE NOTICE '✅ Migration completed successfully!';
ELSE
RAISE NOTICE '⚠️ Migration incomplete. Please check the logs above.';
END IF;
RAISE NOTICE '========================================';
END $$;