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.
32 lines
1.6 KiB
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 |