class CustomerQuery < ApplicationQuery attr_reader :partner, :user, :params def initialize(partner, user, params) @partner = partner @user = user @params = params end def call customers = manager_group_scope keyword = params[:keyword].to_s.strip.presence customers = customers.joins(:school).where('schools.name LIKE ?', "%#{keyword}%") if keyword customers end private def manager_group_scope # 超级管理员 或者 管理员 if user.admin_or_business? || partner.admin_partner_manager_group.partner_managers.exists?(user: user) partner.customers else manager_group_ids = user.partner_managers.where(partner: partner).joins(:partner_manager_group).pluck('partner_manager_groups.id') partner.customers.where(partner_manager_group_id: manager_group_ids) end end end