|
- class Admins::SubjectQuery < ApplicationQuery
- include CustomSortable
-
- attr_reader :params
-
- sort_columns :created_at, default_by: :created_at, default_direction: :desc, default_table: 'subjects'
-
- def initialize(params)
- @params = params
- end
-
- def call
- subjects = Subject.all
-
- subjects = subjects.where(id: params[:id]) if params[:id].present?
-
- # 状态过滤
- status =
- case params[:status].to_s.strip
- when "editing" then {status: 0}
- when "applying" then {status: 2, public: [0, 1]}
- when "pending" then {public: 1}
- when "published" then {public: 2}
- end
-
- subjects = subjects.where(status) if status
-
- # 创建者单位
- if params[:school_id].present?
- subjects = subjects.joins(user: :user_extension).where(user_extensions: { school_id: params[:school_id] })
- end
-
- # 首页展示、金课
- %i[homepage_show excellent].each do |column|
- if params[column].present? && params[column].to_s == 'true'
- subjects = subjects.where(column => true)
- end
- end
-
- # 关键字
- keyword = params[:keyword].to_s.strip
- if keyword
- sql = 'CONCAT(lastname, firstname) LIKE :keyword OR subjects.name LIKE :keyword'
- subjects = subjects.joins(:user).where(sql, keyword: "%#{keyword}%")
- end
-
- custom_sort(subjects, params[:sort_by], params[:sort_direction])
- end
- end
|