parent
ee58beb147
commit
bc2fb6801d
@ -0,0 +1,37 @@
|
||||
class Weapps::SubjectQuery < ApplicationQuery
|
||||
include CustomSortable
|
||||
attr_reader :params
|
||||
|
||||
def initialize(current_laboratory, params)
|
||||
@current_laboratory = current_laboratory
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
subjects = @current_laboratory.subjects
|
||||
|
||||
# 课程体系的过滤
|
||||
if params[:sub_discipline_id].present?
|
||||
subjects = subjects.joins(:sub_disciplines).where(sub_disciplines: {id: params[:sub_discipline_id]})
|
||||
elsif params[:discipline_id].present?
|
||||
subjects = subjects.joins(:sub_disciplines).where(sub_disciplines: {discipline_id: params[:discipline_id]})
|
||||
else
|
||||
subjects = subjects.joins(:sub_discipline_containers).where(sub_discipline_containers: {container_type: "Subject"})
|
||||
end
|
||||
|
||||
subjects = subjects.left_joins(:shixuns).select('subjects.id, subjects.name, subjects.excellent, subjects.stages_count, subjects.status,
|
||||
subjects.shixuns_count, subjects.updated_at, IFNULL(sum(shixuns.myshixuns_count), 0) myshixuns_count')
|
||||
.group('subjects.id').order("#{order_type} #{sort_type}")
|
||||
subjects
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def order_type
|
||||
params[:order] || "updated_at"
|
||||
end
|
||||
|
||||
def sort_type
|
||||
params[:sort] || "desc"
|
||||
end
|
||||
end
|
@ -0,0 +1,7 @@
|
||||
json.subjects @subjects do |subject|
|
||||
json.(subject, :id, :excellent, :name, :stages_count, :shixuns_count, :myshixuns_count)
|
||||
json.image_url url_to_avatar(subject)
|
||||
json.allow_visit subject.status > 1 || User.current.manager_of_subject?(subject) || User.current.admin?
|
||||
end
|
||||
|
||||
json.total_count @subject_count
|
Loading…
Reference in new issue