From 06e1f56ae9c4cfefe5f4f37f9cd272850f28651b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 2 Oct 2019 11:06:05 +0100 Subject: [PATCH] Extract filter list fetching into a separate endpoint --- .../order_cycle_controller.js.coffee | 1 + .../controllers/products_controller.js.coffee | 28 +++++++++---- .../services/order_cycle_resource.js.coffee | 12 ++++++ .../api/order_cycles_controller.rb | 41 +++++++++++++++++++ config/routes/api.rb | 2 + 5 files changed, 77 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/darkswarm/controllers/order_cycle_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/order_cycle_controller.js.coffee index d900fd0a27..55e44d037e 100644 --- a/app/assets/javascripts/darkswarm/controllers/order_cycle_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/order_cycle_controller.js.coffee @@ -32,3 +32,4 @@ Darkswarm.controller "OrderCycleChangeCtrl", ($scope, $timeout, OrderCycle, Prod Products.update() Cart.reloadFinalisedLineItems() ChangeableOrdersAlert.reload() + # Reload Filters from new endpoint after changing OC here diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 0d4567afda..36620b827e 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, OrderCycle, FilterSelectorsService, Cart, Dereferencer, Taxons, Properties, currentHub, $timeout) -> +Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, OrderCycle, OrderCycleResource, FilterSelectorsService, Cart, Dereferencer, Taxons, Properties, currentHub, $timeout) -> $scope.Products = Products $scope.Cart = Cart $scope.query = "" @@ -12,17 +12,31 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord $scope.supplied_taxons = -> return $scope.memoized_taxons if $scope.memoized_taxons != undefined $scope.memoized_taxons = {} - currentHub.supplied_taxons.map( (taxon) -> - $scope.memoized_taxons[taxon.id] = Taxons.taxons_by_id[taxon.id] - ) + + params = { + id: OrderCycle.order_cycle.order_cycle_id, + distributor: currentHub.id + } + OrderCycleResource.taxons params, (data)=> + data.map( (taxon) -> + $scope.memoized_taxons[taxon.id] = Taxons.taxons_by_id[taxon.id] + ) + $scope.memoized_taxons $scope.supplied_properties = -> return $scope.memoized_properties if $scope.memoized_properties != undefined $scope.memoized_properties = {} - currentHub.supplied_properties.map( (property) -> - $scope.memoized_properties[property.id] = Properties.properties_by_id[property.id] - ) + + params = { + id: OrderCycle.order_cycle.order_cycle_id, + distributor: currentHub.id + } + OrderCycleResource.properties params, (data)=> + data.map( (property) -> + $scope.memoized_properties[property.id] = Properties.properties_by_id[property.id] + ) + $scope.memoized_properties $scope.loadMore = -> diff --git a/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee b/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee index a92a7288fe..32d70d54a5 100644 --- a/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee +++ b/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee @@ -6,4 +6,16 @@ Darkswarm.factory 'OrderCycleResource', ($resource) -> url: '/api/order_cycles/:id/products' params: id: '@id' + 'taxons': + method: 'GET' + isArray: true + url: '/api/order_cycles/:id/taxons' + params: + id: '@id' + 'properties': + method: 'GET' + isArray: true + url: '/api/order_cycles/:id/properties' + params: + id: '@id' }) diff --git a/app/controllers/api/order_cycles_controller.rb b/app/controllers/api/order_cycles_controller.rb index 43e17f5745..34280e6771 100644 --- a/app/controllers/api/order_cycles_controller.rb +++ b/app/controllers/api/order_cycles_controller.rb @@ -1,7 +1,10 @@ module Api class OrderCyclesController < BaseController + include EnterprisesHelper respond_to :json + skip_authorization_check + def products products = OpenFoodNetwork::ProductsRenderer.new(current_distributor, current_order_cycle, params).products_json # products = ::ProductsFilterer.new(current_distributor, current_customer, products_json).call # TBD @@ -10,5 +13,43 @@ module Api rescue OpenFoodNetwork::ProductsRenderer::NoProducts render status: :not_found, json: '' end + + def taxons + taxons = Spree::Taxon. + joins(:products). + where(spree_products: { id: distributed_products(distributor, order_cycle, customer) }). + select('DISTINCT spree_taxons.*') + + render json: ActiveModel::ArraySerializer.new(taxons, each_serializer: Api::TaxonSerializer) + end + + def properties + properties = Spree::Property. + joins(:products). + where(spree_products: { id: distributed_products(distributor, order_cycle, customer) }). + select('DISTINCT spree_properties.*') + + render json: ActiveModel::ArraySerializer.new( + properties, each_serializer: Api::PropertySerializer + ) + end + + private + + def distributor + Enterprise.find_by_id(params[:distributor]) + end + + def order_cycle + OrderCycle.find_by_id(params[:id]) + end + + def customer + @current_api_user.andand.customer_of(distributor) || nil + end + + def distributed_products(distributor, order_cycle, customer) + OrderCycleDistributedProducts.new(distributor, order_cycle, customer).products_relation + end end end diff --git a/config/routes/api.rb b/config/routes/api.rb index c46a4abd76..2b371e6832 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -46,6 +46,8 @@ Openfoodnetwork::Application.routes.draw do get :accessible, on: :collection get :products, on: :member + get :taxons, on: :member + get :properties, on: :member end resource :status do