From 84761fcb17a837ab840714073c2c0f2e31f74297 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sun, 9 Apr 2023 18:57:30 -0700 Subject: [PATCH] Update advanced filter params --- app/controllers/api/v1/parties_controller.rb | 54 ++++++++++++-------- app/controllers/api/v1/users_controller.rb | 54 ++++++++++++++------ 2 files changed, 73 insertions(+), 35 deletions(-) diff --git a/app/controllers/api/v1/parties_controller.rb b/app/controllers/api/v1/parties_controller.rb index c6167af..5767706 100644 --- a/app/controllers/api/v1/parties_controller.rb +++ b/app/controllers/api/v1/parties_controller.rb @@ -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) diff --git a/app/controllers/api/v1/users_controller.rb b/app/controllers/api/v1/users_controller.rb index bb216f8..d290c93 100644 --- a/app/controllers/api/v1/users_controller.rb +++ b/app/controllers/api/v1/users_controller.rb @@ -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