class Api::V1::OrderArticlesController < Api::V1::BaseController include Concerns::CollectionScope before_action ->{ doorkeeper_authorize! 'orders:read', 'orders:write' } def index render_collection search_scope end def show render json: scope.find(params.require(:id)) end private def scope OrderArticle.includes(:article_price, article: :supplier) end def search_scope merge_ordered_scope(super, params.fetch(:q, {})[:ordered]) end def merge_ordered_scope(scope, ordered) if ordered.blank? scope elsif ordered == 'member' && current_ordergroup scope.joins(:group_order_articles).merge(current_ordergroup.group_order_articles) elsif ordered == 'all' table = scope.arel_table scope.where(table[:quantity].gt(0).or(table[:tolerance].gt(0))) elsif ordered == 'supplier' scope.ordered else scope.none # as a hint that it's an invalid value end end end