From 5da86c5405783f72a8fa877f5d03fa056c2fdd25 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Fri, 19 Dec 2025 12:26:26 -0800 Subject: [PATCH] fix collection filters to support comma-separated array params --- .../api/v1/collection_artifacts_controller.rb | 11 ++++++++--- .../api/v1/collection_characters_controller.rb | 16 ++++++++++------ .../api/v1/collection_summons_controller.rb | 9 +++++++-- .../api/v1/collection_weapons_controller.rb | 13 +++++++++---- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/app/controllers/api/v1/collection_artifacts_controller.rb b/app/controllers/api/v1/collection_artifacts_controller.rb index 5da60d8..a1e0283 100644 --- a/app/controllers/api/v1/collection_artifacts_controller.rb +++ b/app/controllers/api/v1/collection_artifacts_controller.rb @@ -15,10 +15,11 @@ module Api def index @collection_artifacts = @target_user.collection_artifacts.includes(:artifact) + # Apply filters (array_param splits comma-separated values for OR logic) @collection_artifacts = @collection_artifacts.where(artifact_id: params[:artifact_id]) if params[:artifact_id] - @collection_artifacts = @collection_artifacts.where(element: params[:element]) if params[:element] - @collection_artifacts = @collection_artifacts.by_proficiency(params[:proficiency]) if params[:proficiency].present? - @collection_artifacts = @collection_artifacts.joins(:artifact).where(artifacts: { rarity: params[:rarity] }) if params[:rarity] + @collection_artifacts = @collection_artifacts.where(element: array_param(:element)) if params[:element] + @collection_artifacts = @collection_artifacts.by_proficiency(array_param(:proficiency)) if params[:proficiency].present? + @collection_artifacts = @collection_artifacts.joins(:artifact).where(artifacts: { rarity: array_param(:rarity) }) if params[:rarity] # Skill filters - each slot uses OR logic, slots combined with AND logic @collection_artifacts = @collection_artifacts.with_skill_in_slot(1, params[:skill1]) if params[:skill1].present? @@ -203,6 +204,10 @@ module Api def batch_destroy_params params.permit(ids: []) end + + def array_param(key) + params[key]&.to_s&.split(',') + end end end end diff --git a/app/controllers/api/v1/collection_characters_controller.rb b/app/controllers/api/v1/collection_characters_controller.rb index 29dc59c..17d4239 100644 --- a/app/controllers/api/v1/collection_characters_controller.rb +++ b/app/controllers/api/v1/collection_characters_controller.rb @@ -14,12 +14,12 @@ module Api @collection_characters = @target_user.collection_characters .includes(:character, :awakening) - # Apply filters - @collection_characters = @collection_characters.by_element(params[:element]) if params[:element] - @collection_characters = @collection_characters.by_rarity(params[:rarity]) if params[:rarity] - @collection_characters = @collection_characters.by_race(params[:race]) if params[:race] - @collection_characters = @collection_characters.by_proficiency(params[:proficiency]) if params[:proficiency] - @collection_characters = @collection_characters.by_gender(params[:gender]) if params[:gender] + # Apply filters (array_param splits comma-separated values for OR logic) + @collection_characters = @collection_characters.by_element(array_param(:element)) if params[:element] + @collection_characters = @collection_characters.by_rarity(array_param(:rarity)) if params[:rarity] + @collection_characters = @collection_characters.by_race(array_param(:race)) if params[:race] + @collection_characters = @collection_characters.by_proficiency(array_param(:proficiency)) if params[:proficiency] + @collection_characters = @collection_characters.by_gender(array_param(:gender)) if params[:gender] # Apply sorting @collection_characters = @collection_characters.sorted_by(params[:sort]) @@ -216,6 +216,10 @@ module Api def batch_destroy_params params.permit(ids: []) end + + def array_param(key) + params[key]&.to_s&.split(',') + end end end end diff --git a/app/controllers/api/v1/collection_summons_controller.rb b/app/controllers/api/v1/collection_summons_controller.rb index e53648a..7622517 100644 --- a/app/controllers/api/v1/collection_summons_controller.rb +++ b/app/controllers/api/v1/collection_summons_controller.rb @@ -14,9 +14,10 @@ module Api @collection_summons = @target_user.collection_summons .includes(:summon) + # Apply filters (array_param splits comma-separated values for OR logic) @collection_summons = @collection_summons.by_summon(params[:summon_id]) if params[:summon_id] - @collection_summons = @collection_summons.by_element(params[:element]) if params[:element] - @collection_summons = @collection_summons.by_rarity(params[:rarity]) if params[:rarity] + @collection_summons = @collection_summons.by_element(array_param(:element)) if params[:element] + @collection_summons = @collection_summons.by_rarity(array_param(:rarity)) if params[:rarity] @collection_summons = @collection_summons.paginate(page: params[:page], per_page: params[:limit] || 50) @@ -187,6 +188,10 @@ module Api def batch_destroy_params params.permit(ids: []) end + + def array_param(key) + params[key]&.to_s&.split(',') + end end end end diff --git a/app/controllers/api/v1/collection_weapons_controller.rb b/app/controllers/api/v1/collection_weapons_controller.rb index 3353b32..ea8a75f 100644 --- a/app/controllers/api/v1/collection_weapons_controller.rb +++ b/app/controllers/api/v1/collection_weapons_controller.rb @@ -16,11 +16,12 @@ module Api :weapon_key1, :weapon_key2, :weapon_key3, :weapon_key4) + # Apply filters (array_param splits comma-separated values for OR logic) @collection_weapons = @collection_weapons.by_weapon(params[:weapon_id]) if params[:weapon_id] - @collection_weapons = @collection_weapons.by_element(params[:element]) if params[:element] - @collection_weapons = @collection_weapons.by_rarity(params[:rarity]) if params[:rarity] - @collection_weapons = @collection_weapons.by_proficiency(params[:proficiency]) if params[:proficiency] - @collection_weapons = @collection_weapons.by_series(params[:series]) if params[:series] + @collection_weapons = @collection_weapons.by_element(array_param(:element)) if params[:element] + @collection_weapons = @collection_weapons.by_rarity(array_param(:rarity)) if params[:rarity] + @collection_weapons = @collection_weapons.by_proficiency(array_param(:proficiency)) if params[:proficiency] + @collection_weapons = @collection_weapons.by_series(array_param(:series)) if params[:series] @collection_weapons = @collection_weapons.sorted_by(params[:sort]) @@ -201,6 +202,10 @@ module Api def batch_destroy_params params.permit(ids: []) end + + def array_param(key) + params[key]&.to_s&.split(',') + end end end end