CREATE TABLE IF NOT EXISTS achievements ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, description TEXT NOT NULL, icon_url VARCHAR(512), created_at TIMESTAMP NOT NULL DEFAULT NOW(), updated_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS user_achievements ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, achievement_id UUID NOT NULL REFERENCES achievements(id) ON DELETE CASCADE, received_at TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE(user_id, achievement_id) ); CREATE INDEX IF NOT EXISTS idx_user_achievements_user_id ON user_achievements(user_id); CREATE INDEX IF NOT EXISTS idx_user_achievements_achievement_id ON user_achievements(achievement_id);