You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/queries/optional_item_query.rb

32 lines
1.6 KiB

class OptionalItemQuery < ApplicationQuery
attr_reader :params
def initialize(params)
@params = params
end
def call
items = ItemBank.all
if params[:tag_discipline_id].present? && params[:sub_discipline_id].present?
items = items.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]})
hacks = Hack.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]})
elsif params[:sub_discipline_id].present?
items = items.where(sub_discipline_id: params[:sub_discipline_id])
hacks = Hack.where(sub_discipline_id: params[:sub_discipline_id])
end
# 来源
source = params[:source].present? ? params[:source].to_i : 1
public = source == 3 ? [0, 1] : source
items = items.where(public: public)
# 难度
difficulty = params[:difficulty] ? params[:difficulty].to_i : 1
items = items.where(difficulty: difficulty)
single_question_count = items.select{ |item| item.item_type == "SINGLE" }.size
multiple_question_count = items.select{ |item| item.item_type == "MULTIPLE" }.size
judgement_question_count = items.select{ |item| item.item_type == "JUDGMENT" }.size
program_question_count = hacks.present? ? hacks.pluck(:item_bank_id).reject(&:blank?).size : items.select{ |item| item.item_type == "PROGRAM" }.size
{single_question_count: single_question_count, multiple_question_count: multiple_question_count, judgement_question_count: judgement_question_count, program_question_count: program_question_count}
end
end