fix collection filters to support comma-separated array params

This commit is contained in:
Justin Edmund 2025-12-19 12:26:26 -08:00
parent 693962ce3b
commit 5da86c5405
4 changed files with 34 additions and 15 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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