class Api::V1::SearchController < Api::V1::ApiController def characters filters = search_params[:filters] locale = search_params[:locale] || 'en' conditions = {} if filters conditions[:rarity] = filters['rarity'] unless filters['rarity'].blank? || filters['rarity'].empty? conditions[:element] = filters['element'] unless filters['element'].blank? || filters['element'].empty? conditions[:proficiency1] = filters['proficiency1'] unless filters['proficiency1'].blank? || filters['proficiency1'].empty? conditions[:proficiency2] = filters['proficiency2'] unless filters['proficiency2'].blank? || filters['proficiency2'].empty? # conditions[:series] = filters['series'] unless filters['series'].blank? || filters['series'].empty? end @characters = if search_params[:query].present? && search_params[:query].length >= 2 if locale == 'ja' Character.jp_search(search_params[:query]).where(conditions) else Character.en_search(search_params[:query]).where(conditions) end else Character.where(conditions) end @count = @characters.length @characters = @characters.paginate(page: search_params[:page], per_page: 10) end def weapons filters = search_params[:filters] locale = search_params[:locale] || 'en' conditions = {} if filters conditions[:rarity] = filters['rarity'] unless filters['rarity'].blank? || filters['rarity'].empty? conditions[:element] = filters['element'] unless filters['element'].blank? || filters['element'].empty? conditions[:proficiency] = filters['proficiency1'] unless filters['proficiency1'].blank? || filters['proficiency1'].empty? conditions[:series] = filters['series'] unless filters['series'].blank? || filters['series'].empty? end @weapons = if search_params[:query].present? && search_params[:query].length >= 2 if locale == 'ja' Weapon.jp_search(search_params[:query]).where(conditions) else Weapon.en_search(search_params[:query]).where(conditions) end else Weapon.where(conditions) end @count = @weapons.length @weapons = @weapons.paginate(page: search_params[:page], per_page: 10) end def summons filters = search_params[:filters] locale = search_params[:locale] || 'en' conditions = {} if filters conditions[:rarity] = filters['rarity'] unless filters['rarity'].blank? || filters['rarity'].empty? conditions[:element] = filters['element'] unless filters['element'].blank? || filters['element'].empty? end @summons = if search_params[:query].present? && search_params[:query].length >= 2 if locale == 'ja' Summon.jp_search(search_params[:query]).where(conditions) else Summon.en_search(search_params[:query]).where(conditions) end else Summon.where(conditions) end @count = @summons.length @summons = @summons.paginate(page: search_params[:page], per_page: 10) end def job_skills raise Api::V1::NoJobProvidedError unless search_params[:job].present? # Set up basic parameters we'll use job = Job.find(search_params[:job]) locale = search_params[:locale] || 'en' # Set the conditions based on the group requested conditions = {} if search_params[:filters].present? && search_params[:filters]['group'].present? group = search_params[:filters]['group'].to_i if group >= 0 && group < 4 conditions[:color] = group conditions[:emp] = false conditions[:base] = false elsif group == 4 conditions[:emp] = true elsif group == 5 conditions[:base] = true end end # Perform the query @skills = if search_params[:query].present? && search_params[:query].length >= 2 JobSkill.method("#{locale}_search").call(search_params[:query]) .where(conditions) .where(job: job.id, main: false) .or( JobSkill.method("#{locale}_search").call(search_params[:query]) .where(conditions) .where(sub: true) ) else JobSkill.all .where(conditions) .where(job: job.id, main: false) .or( JobSkill.all .where(conditions) .where(sub: true) ) .or( JobSkill.all .where(conditions) .where(job: job.base_job.id, base: true) .where.not(job: job.id) ) end @count = @skills.length @skills = @skills.paginate(page: search_params[:page], per_page: 10) end private # Specify whitelisted properties that can be modified. def search_params params.require(:search).permit! end end