space-game/supabase/migrations/003_leaderboard_user_mapping.sql
Michael Mainguy b4baa2beba
All checks were successful
Build / build (push) Successful in 1m44s
Migrate to cloud-only level system using Supabase
Remove all local level storage concepts and load levels exclusively from
Supabase cloud. Simplifies LevelRegistry from 380+ lines to ~50 lines.
Uses CloudLevelEntry directly throughout the codebase instead of wrapper
types like LevelDirectoryEntry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 17:26:24 -06:00

52 lines
1.9 KiB
SQL

-- ===========================================
-- LEADERBOARD USER MAPPING MIGRATION
-- Migrates leaderboard from Auth0 IDs to internal UUIDs
-- Normalizes player_name to users table
-- ===========================================
-- ===========================================
-- CREATE USER RECORDS FOR EXISTING LEADERBOARD ENTRIES
-- ===========================================
-- Create user records for any Auth0 IDs in leaderboard that don't have users yet
-- Uses player_name from most recent entry as initial display_name
-- DISTINCT ON ensures only one row per user_id (the most recent by created_at)
INSERT INTO users (auth0_id, display_name)
SELECT DISTINCT ON (l.user_id) l.user_id, l.player_name
FROM leaderboard l
WHERE l.user_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM users u WHERE u.auth0_id = l.user_id)
ORDER BY l.user_id, l.created_at DESC
ON CONFLICT (auth0_id) DO NOTHING;
-- ===========================================
-- ADD AND POPULATE INTERNAL USER ID
-- ===========================================
-- Add internal_user_id column (will replace user_id)
ALTER TABLE leaderboard
ADD COLUMN internal_user_id UUID REFERENCES users(id);
-- Populate internal_user_id from existing user_id (auth0_id)
UPDATE leaderboard l
SET internal_user_id = u.id
FROM users u
WHERE l.user_id = u.auth0_id;
-- Create index for new column
CREATE INDEX idx_leaderboard_internal_user_id ON leaderboard(internal_user_id);
-- ===========================================
-- DROP OLD COLUMNS AND RENAME
-- ===========================================
-- Drop old columns (player_name normalized to users table, user_id replaced by UUID)
ALTER TABLE leaderboard DROP COLUMN player_name;
ALTER TABLE leaderboard DROP COLUMN user_id;
-- Rename internal_user_id to user_id for consistency
ALTER TABLE leaderboard RENAME COLUMN internal_user_id TO user_id;
-- Rename index to match new column name
ALTER INDEX idx_leaderboard_internal_user_id RENAME TO idx_leaderboard_user_id;