diff --git a/sql/init.sql b/sql/init.sql index d1c3fdc..6131d54 100644 --- a/sql/init.sql +++ b/sql/init.sql @@ -2,26 +2,21 @@ -- This file includes all the necessary SQL files to set up the database schema -- Enable UUID extension if not already enabled CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; - -- Common utility functions \ i common / utility_functions.sql -- Authentication and user management \ i auth / user_roles.sql \ i auth / user_triggers.sql \ i auth / user_preferences.sql -- Problem-related tables and functions -\ i problems / problems.sql \ i problems / user_problem_feedback.sql \ i problems / user_solved_problems.sql \ i problems / problem_functions.sql -- Contest-related tables and functions +\ i problems / problems.sql \ i problems / user_problem_feedback.sql \ i problems / user_solved_problems.sql \ i problems / problem_functions.sql \ i problems / get_user_solved_problems.sql -- Contest-related tables and functions \ i contests / contests.sql \ i contests / user_contest_participation.sql \ i contests / user_contest_feedback.sql \ i contests / contest_functions.sql -- Leaderboard functions \ i leaderboard / leaderboard_functions.sql -- Grant necessary permissions - GRANT USAGE ON SCHEMA public TO anon, authenticated, service_role; - GRANT ALL ON ALL TABLES IN SCHEMA public TO anon, authenticated, service_role; - GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO anon, authenticated, service_role; - GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO anon, authenticated, service_role; \ No newline at end of file diff --git a/sql/problems/get_user_solved_problems.sql b/sql/problems/get_user_solved_problems.sql new file mode 100644 index 0000000..c1dfaf2 --- /dev/null +++ b/sql/problems/get_user_solved_problems.sql @@ -0,0 +1,16 @@ +-- Function to get solved problems for a specific user +CREATE OR REPLACE FUNCTION get_user_solved_problems(p_user_id UUID) +RETURNS TABLE (problem_id UUID) AS $$ +BEGIN + RETURN QUERY + SELECT usp.problem_id + FROM user_solved_problems usp + JOIN auth.users u ON usp.user_id = u.id + LEFT JOIN user_preferences up ON u.id = up.user_id + WHERE usp.user_id = p_user_id + AND COALESCE(up.hide_from_leaderboard, false) = false; +END; +$$ LANGUAGE plpgsql SECURITY DEFINER; + +-- Grant permissions +GRANT EXECUTE ON FUNCTION get_user_solved_problems TO authenticated, anon; diff --git a/src/lib/components/LeaderboardTable.svelte b/src/lib/components/LeaderboardTable.svelte index a7695d5..43dacc5 100644 --- a/src/lib/components/LeaderboardTable.svelte +++ b/src/lib/components/LeaderboardTable.svelte @@ -111,15 +111,39 @@ function getRankTierName(rank: number): string { {entry.username.substring(0, 2).toUpperCase()} {/if} - - @{entry.username} - +
Loading problems...
+{error}
+Loading problems...
-{error}
- -