Update advanced filter params

This commit is contained in:
Justin Edmund 2023-04-09 18:57:30 -07:00
parent 1d151f1938
commit 84761fcb17
2 changed files with 73 additions and 35 deletions

View file

@ -8,6 +8,16 @@ module Api
before_action :set, only: %w[update destroy]
before_action :authorize, only: %w[update destroy]
MAX_CHARACTERS = 5
MAX_SUMMONS = 8
MAX_WEAPONS = 13
DEFAULT_MIN_CHARACTERS = 3
DEFAULT_MIN_SUMMONS = 2
DEFAULT_MIN_WEAPONS = 5
DEFAULT_MAX_CLEAR_TIME = 5400
def create
party = Party.new
party.user = current_user if current_user
@ -73,7 +83,7 @@ module Api
end
def index
conditions = build_conditions(request.params)
conditions = build_conditions
@parties = Party.joins(:weapons)
.group('parties.id')
@ -102,7 +112,7 @@ module Api
def favorites
raise Api::V1::UnauthorizedError unless current_user
conditions = build_conditions(request.params)
conditions = build_conditions
conditions[:favorites] = { user_id: current_user.id }
@parties = Party.joins(:favorites)
@ -133,45 +143,49 @@ module Api
render_unauthorized_response if @party.user != current_user || @party.edit_key != edit_key
end
def build_conditions(params)
def build_conditions
params = request.params
unless params['recency'].blank?
start_time = (DateTime.current - params['recency'].to_i.seconds)
.to_datetime.beginning_of_day
end
min_characters_count = params['min_characters'] ? params['min_characters'] : 3
min_summons_count = params['min_summons'] ? params['min_summons'] : 2
min_weapons_count = params['min_weapons'] ? params['min_weapons'] : 5
max_clear_time = params['max_clear_time'] ? params['max_clear_time'] : 5400
min_characters_count = params['characters_count'].blank? ? DEFAULT_MIN_CHARACTERS : params['characters_count'].to_i
min_summons_count = params['summons_count'].blank? ? DEFAULT_MIN_SUMMONS : params['summons_count'].to_i
min_weapons_count = params['weapons_count'].blank? ? DEFAULT_MIN_WEAPONS : params['weapons_count'].to_i
max_clear_time = params['max_clear_time'].blank? ? DEFAULT_MAX_CLEAR_TIME : params['max_clear_time'].to_i
{}.tap do |hash|
# Basic filters
hash[:element] = params['element'] unless params['element'].blank?
hash[:element] = params['element'].to_i unless params['element'].blank?
hash[:raid] = params['raid'] unless params['raid'].blank?
hash[:created_at] = start_time..DateTime.current unless params['recency'].blank?
# Advanced filters: Team parameters
hash[:full_auto] = params['full_auto'] unless params['full_auto'].blank?
hash[:charge_attack] = params['charge_attack'] unless params['charge_attack'].blank?
hash[:full_auto] = params['full_auto'].to_i unless params['full_auto'].blank? || params['full_auto'].to_i == -1
hash[:auto_guard] = params['auto_guard'].to_i unless params['auto_guard'].blank? || params['auto_guard'].to_i == -1
hash[:charge_attack] = params['charge_attack'].to_i unless params['charge_attack'].blank? || params['charge_attack'].to_i == -1
hash[:turn_count] = params['max_turns'] unless params['max_turns'].blank?
hash[:button_count] = params['max_buttons'] unless params['max_buttons'].blank?
hash[:clear_time] = 0..max_clear_time
# Turn count of 0 will not be displayed, so disallow on the frontend or set default to 1
# How do we do the same for button count since that can reasonably be 1?
# hash[:turn_count] = params['turn_count'].to_i unless params['turn_count'].blank? || params['turn_count'].to_i <= 0
# hash[:button_count] = params['button_count'].to_i unless params['button_count'].blank?
# hash[:clear_time] = 0..max_clear_time
# Advanced filters: Object counts
hash[:characters_count] = min_characters_count..5
hash[:summons_count] = min_summons_count..8
hash[:weapons_count] = min_weapons_count..13
hash[:characters_count] = min_characters_count..MAX_CHARACTERS
hash[:summons_count] = min_summons_count..MAX_SUMMONS
hash[:weapons_count] = min_weapons_count..MAX_WEAPONS
end
end
def original
"source_party_id IS NULL" unless params['original'].blank? || params['original'] == '0'
"source_party_id IS NULL" unless request.params['original'].blank? || request.params['original'] == "false"
end
def user_quality
"user_id IS NOT NULL" unless params[:user_quality].nil? || params[:user_quality] == "0"
"user_id IS NOT NULL" unless request.params[:user_quality].blank? || request.params[:user_quality] == "false"
end
def name_quality
@ -192,7 +206,7 @@ module Api
joined_names = low_quality.map { |name| "'#{name}'" }.join(',')
"name NOT IN (#{joined_names})" unless params[:name_quality].nil? || params[:name_quality] == "0"
"name NOT IN (#{joined_names})" unless request.params[:name_quality].blank? || request.params[:name_quality] == "false"
end
def remixed_name(name)

View file

@ -8,6 +8,16 @@ module Api
before_action :set, except: %w[create check_email check_username]
before_action :set_by_id, only: %w[info update]
MAX_CHARACTERS = 5
MAX_SUMMONS = 8
MAX_WEAPONS = 13
DEFAULT_MIN_CHARACTERS = 3
DEFAULT_MIN_SUMMONS = 2
DEFAULT_MIN_WEAPONS = 5
DEFAULT_MAX_CLEAR_TIME = 5400
def create
user = User.new(user_params)
@ -44,9 +54,18 @@ module Api
render_not_found_response('user')
else
conditions = build_conditions(request.params)
conditions = build_conditions
conditions[:user_id] = @user.id
@parties = Party
.where(conditions)
.where(name_quality)
.where(user_quality)
.where(original)
.order(created_at: :desc)
.paginate(page: request.params[:page], per_page: COLLECTION_PER_PAGE)
.each { |party| party.favorited = party.is_favorited(current_user) }
parties = Party
.where(conditions)
.where(name_quality)
@ -84,35 +103,40 @@ module Api
private
def build_conditions(params)
def build_conditions
params = request.params
unless params['recency'].blank?
start_time = (DateTime.current - params['recency'].to_i.seconds)
.to_datetime.beginning_of_day
end
min_characters_count = params['min_characters'] ? params['min_characters'] : 3
min_summons_count = params['min_summons'] ? params['min_summons'] : 2
min_weapons_count = params['min_weapons'] ? params['min_weapons'] : 5
max_clear_time = params['max_clear_time'] ? params['max_clear_time'] : 5400
min_characters_count = params['characters_count'].blank? ? DEFAULT_MIN_CHARACTERS : params['characters_count'].to_i
min_summons_count = params['summons_count'].blank? ? DEFAULT_MIN_SUMMONS : params['summons_count'].to_i
min_weapons_count = params['weapons_count'].blank? ? DEFAULT_MIN_WEAPONS : params['weapons_count'].to_i
max_clear_time = params['max_clear_time'].blank? ? DEFAULT_MAX_CLEAR_TIME : params['max_clear_time'].to_i
{}.tap do |hash|
# Basic filters
hash[:element] = params['element'] unless params['element'].blank?
hash[:element] = params['element'].to_i unless params['element'].blank?
hash[:raid] = params['raid'] unless params['raid'].blank?
hash[:created_at] = start_time..DateTime.current unless params['recency'].blank?
# Advanced filters: Team parameters
hash[:full_auto] = params['full_auto'] unless params['full_auto'].blank?
hash[:charge_attack] = params['charge_attack'] unless params['charge_attack'].blank?
hash[:full_auto] = params['full_auto'].to_i unless params['full_auto'].blank? || params['full_auto'].to_i == -1
hash[:auto_guard] = params['auto_guard'].to_i unless params['auto_guard'].blank? || params['auto_guard'].to_i == -1
hash[:charge_attack] = params['charge_attack'].to_i unless params['charge_attack'].blank? || params['charge_attack'].to_i == -1
hash[:turn_count] = params['max_turns'] unless params['max_turns'].blank?
hash[:button_count] = params['max_buttons'] unless params['max_buttons'].blank?
hash[:clear_time] = 0..max_clear_time
# Turn count of 0 will not be displayed, so disallow on the frontend or set default to 1
# How do we do the same for button count since that can reasonably be 1?
# hash[:turn_count] = params['turn_count'].to_i unless params['turn_count'].blank? || params['turn_count'].to_i <= 0
# hash[:button_count] = params['button_count'].to_i unless params['button_count'].blank?
# hash[:clear_time] = 0..max_clear_time
# Advanced filters: Object counts
hash[:characters_count] = min_characters_count..5
hash[:summons_count] = min_summons_count..8
hash[:weapons_count] = min_weapons_count..13
hash[:characters_count] = min_characters_count..MAX_CHARACTERS
hash[:summons_count] = min_summons_count..MAX_SUMMONS
hash[:weapons_count] = min_weapons_count..MAX_WEAPONS
end
end