From 4a471dd2730064c4775dc898d704000b9ee1e38d Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 2 Dec 2025 17:19:15 -0800 Subject: [PATCH] add filtering/sorting params to collection characters endpoint --- app/controllers/api/v1/collection_characters_controller.rb | 3 +++ app/controllers/api/v1/search_controller.rb | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/app/controllers/api/v1/collection_characters_controller.rb b/app/controllers/api/v1/collection_characters_controller.rb index ea15e1a..f59bd3d 100644 --- a/app/controllers/api/v1/collection_characters_controller.rb +++ b/app/controllers/api/v1/collection_characters_controller.rb @@ -21,6 +21,9 @@ module Api @collection_characters = @collection_characters.by_proficiency(params[:proficiency]) if params[:proficiency] @collection_characters = @collection_characters.by_gender(params[:gender]) if params[:gender] + # Apply sorting + @collection_characters = @collection_characters.sorted_by(params[:sort]) + # Apply pagination @collection_characters = @collection_characters.paginate(page: params[:page], per_page: params[:limit] || 50) diff --git a/app/controllers/api/v1/search_controller.rb b/app/controllers/api/v1/search_controller.rb index a65894e..708a13d 100644 --- a/app/controllers/api/v1/search_controller.rb +++ b/app/controllers/api/v1/search_controller.rb @@ -55,6 +55,7 @@ module Api def characters filters = search_params[:filters] locale = search_params[:locale] || 'en' + exclude = search_params[:exclude] conditions = {} if filters @@ -88,6 +89,11 @@ module Api characters = characters.where('series && ARRAY[?]::integer[]', series_values) end + # Exclude already-owned characters (for collection modal) + if exclude.present? && exclude.any? + characters = characters.where.not(id: exclude) + end + count = characters.length paginated = characters.paginate(page: search_params[:page], per_page: search_page_size)