From 56f9adc5b72c664090aac245584f159dcd333e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 10:44:30 +0100 Subject: [PATCH 01/10] Filter Admin products by name asc --- .../admin/bulk_product_update.js.coffee | 1 + app/controllers/api/products_controller.rb | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index 31123dcb13..85b003cb40 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -54,6 +54,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout 'q[name_cont]': $scope.query, 'q[supplier_id_eq]': $scope.producerFilter, 'q[primary_taxon_id_eq]': $scope.categoryFilter, + 'q[s]': 'name ASC', import_date: $scope.importDateFilter, page: $scope.page, per_page: $scope.per_page diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index b3ab251c97..27bcc3e411 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -48,16 +48,22 @@ module Api end def bulk_products - product_query = OpenFoodNetwork::Permissions.new(current_api_user). - editable_products.merge(product_scope) + product_query = OpenFoodNetwork::Permissions. + new(current_api_user). + editable_products. + merge(product_scope) if params[:import_date].present? - product_query = product_query.imported_on(params[:import_date]).group_by_products_id + product_query = product_query. + imported_on(params[:import_date]). + group_by_products_id end - @products = product_query.order('created_at DESC'). - ransack(params[:q]).result. - page(params[:page] || DEFAULT_PAGE).per(params[:per_page] || DEFAULT_PER_PAGE) + @products = product_query. + ransack(params[:q]). + result. + page(params[:page] || DEFAULT_PAGE). + per(params[:per_page] || DEFAULT_PER_PAGE) render_paged_products @products end From 06971b7198610efbd6b4c285f1876f0471e0d99a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 11:11:37 +0100 Subject: [PATCH 02/10] Add sortable name column for Admin Products --- .../admin/bulk_product_update.js.coffee | 15 ++++++++++++--- .../admin/products/index/_products_head.html.haml | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index 85b003cb40..bd691949cc 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -1,4 +1,4 @@ -angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $filter, $http, $window, BulkProducts, DisplayProperties, DirtyProducts, VariantUnitManager, StatusMessage, producers, Taxons, Columns, tax_categories, RequestMonitor) -> +angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $filter, $http, $window, BulkProducts, DisplayProperties, DirtyProducts, VariantUnitManager, StatusMessage, producers, Taxons, Columns, tax_categories, RequestMonitor, SortOptions) -> $scope.StatusMessage = StatusMessage $scope.columns = Columns.columns @@ -38,6 +38,8 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.query = "" $scope.DisplayProperties = DisplayProperties + $scope.sortOptions = SortOptions + $scope.initialise = -> $scope.fetchProducts() @@ -54,7 +56,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout 'q[name_cont]': $scope.query, 'q[supplier_id_eq]': $scope.producerFilter, 'q[primary_taxon_id_eq]': $scope.categoryFilter, - 'q[s]': 'name ASC', + 'q[s]': $scope.sorting || 'created_at desc', import_date: $scope.importDateFilter, page: $scope.page, per_page: $scope.per_page @@ -104,9 +106,16 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.categoryFilter = "0" $scope.importDateFilter = "0" + $scope.$watch 'sortOptions', (sort) -> + if sort && sort.predicate != "" + $scope.sorting = sort.predicate + ' desc' if sort.reverse + $scope.sorting = sort.predicate + ' asc' if !sort.reverse + $scope.fetchProducts() + , true + confirm_unsaved_changes = () -> (DirtyProducts.count() > 0 and confirm(t("unsaved_changes_confirmation"))) or (DirtyProducts.count() == 0) - + editProductUrl = (product, variant) -> "/admin/products/" + product.permalink_live + ((if variant then "/variants/" + variant.id else "")) + "/edit" diff --git a/app/views/spree/admin/products/index/_products_head.html.haml b/app/views/spree/admin/products/index/_products_head.html.haml index e5aa68f38d..e0b55fea92 100644 --- a/app/views/spree/admin/products/index/_products_head.html.haml +++ b/app/views/spree/admin/products/index/_products_head.html.haml @@ -26,7 +26,8 @@ %th.image{ 'ng-show' => 'columns.image.visible' } %th.producer{ 'ng-show' => 'columns.producer.visible' }=t('admin.producer') %th.sku{ 'ng-show' => 'columns.sku.visible' }=t('admin.sku') - %th.name{ 'ng-show' => 'columns.name.visible' }=t('.name') + %th.name{ 'ng-show' => 'columns.name.visible' } + = render partial: 'spree/admin/orders/sortable_header', locals: {column_name: 'name'} %th.unit{ 'ng-show' => 'columns.unit.visible' }=t('.unit') %th.display_as{ 'ng-show' => 'columns.unit.visible' }=t('.display_as') %th.price{ 'ng-show' => 'columns.price.visible' }=t('admin.price') From 3dcb66014e38093d93169a7366b3371c56e37e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 11:16:01 +0100 Subject: [PATCH 03/10] Factorize column sorter partial --- app/views/spree/admin/orders/index.html.haml | 2 +- app/views/spree/admin/products/index/_products_head.html.haml | 2 +- .../spree/admin/{orders => shared}/_sortable_header.html.haml | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename app/views/spree/admin/{orders => shared}/_sortable_header.html.haml (100%) diff --git a/app/views/spree/admin/orders/index.html.haml b/app/views/spree/admin/orders/index.html.haml index 80fe18217d..244b2e8f1c 100644 --- a/app/views/spree/admin/orders/index.html.haml +++ b/app/views/spree/admin/orders/index.html.haml @@ -43,7 +43,7 @@ - ['number', 'state', 'payment_state', 'shipment_state', 'email', 'total'].each do |column_name| %th - = render partial: 'sortable_header', locals: {column_name: column_name} + = render partial: 'spree/admin/shared/sortable_header', locals: {column_name: column_name} %th.actions %tbody diff --git a/app/views/spree/admin/products/index/_products_head.html.haml b/app/views/spree/admin/products/index/_products_head.html.haml index e0b55fea92..4f549c73e7 100644 --- a/app/views/spree/admin/products/index/_products_head.html.haml +++ b/app/views/spree/admin/products/index/_products_head.html.haml @@ -27,7 +27,7 @@ %th.producer{ 'ng-show' => 'columns.producer.visible' }=t('admin.producer') %th.sku{ 'ng-show' => 'columns.sku.visible' }=t('admin.sku') %th.name{ 'ng-show' => 'columns.name.visible' } - = render partial: 'spree/admin/orders/sortable_header', locals: {column_name: 'name'} + = render partial: 'spree/admin/shared/sortable_header', locals: {column_name: 'name'} %th.unit{ 'ng-show' => 'columns.unit.visible' }=t('.unit') %th.display_as{ 'ng-show' => 'columns.unit.visible' }=t('.display_as') %th.price{ 'ng-show' => 'columns.price.visible' }=t('admin.price') diff --git a/app/views/spree/admin/orders/_sortable_header.html.haml b/app/views/spree/admin/shared/_sortable_header.html.haml similarity index 100% rename from app/views/spree/admin/orders/_sortable_header.html.haml rename to app/views/spree/admin/shared/_sortable_header.html.haml From 7100111f932fa45b1a5585f91d4bed8c9597b4f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 11:43:05 +0100 Subject: [PATCH 04/10] Fix specs and cosmetics --- .../admin/bulk_product_update.js.coffee | 2 +- app/controllers/api/products_controller.rb | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index bd691949cc..b748bc6230 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -56,7 +56,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout 'q[name_cont]': $scope.query, 'q[supplier_id_eq]': $scope.producerFilter, 'q[primary_taxon_id_eq]': $scope.categoryFilter, - 'q[s]': $scope.sorting || 'created_at desc', + 'q[s]': $scope.sorting || 'created_at asc', import_date: $scope.importDateFilter, page: $scope.page, per_page: $scope.per_page diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 27bcc3e411..6d2d12837a 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -49,21 +49,21 @@ module Api def bulk_products product_query = OpenFoodNetwork::Permissions. - new(current_api_user). - editable_products. - merge(product_scope) + new(current_api_user). + editable_products. + merge(product_scope) if params[:import_date].present? product_query = product_query. - imported_on(params[:import_date]). - group_by_products_id + imported_on(params[:import_date]). + group_by_products_id end @products = product_query. - ransack(params[:q]). - result. - page(params[:page] || DEFAULT_PAGE). - per(params[:per_page] || DEFAULT_PER_PAGE) + ransack(params[:q]). + result. + page(params[:page] || DEFAULT_PAGE). + per(params[:per_page] || DEFAULT_PER_PAGE) render_paged_products @products end From 89d2750fc4b0d622dc7aae6ccc533d692838fb3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 22:04:09 +0100 Subject: [PATCH 05/10] Set default value at backend side --- app/assets/javascripts/admin/bulk_product_update.js.coffee | 2 +- app/controllers/api/products_controller.rb | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index b748bc6230..289cab1e74 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -56,7 +56,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout 'q[name_cont]': $scope.query, 'q[supplier_id_eq]': $scope.producerFilter, 'q[primary_taxon_id_eq]': $scope.categoryFilter, - 'q[s]': $scope.sorting || 'created_at asc', + 'q[s]': $scope.sorting, import_date: $scope.importDateFilter, page: $scope.page, per_page: $scope.per_page diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 6d2d12837a..548b21cac0 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -60,7 +60,7 @@ module Api end @products = product_query. - ransack(params[:q]). + ransack(query_params_with_defaults). result. page(params[:page] || DEFAULT_PAGE). per(params[:per_page] || DEFAULT_PER_PAGE) @@ -142,6 +142,10 @@ module Api }.to_json end + def query_params_with_defaults + params[:q].to_h.reverse_merge!({ 's' => 'created_at DESC' }) + end + def pagination_data(results) { results: results.total_count, From e7b74b99bae867f286da7bf93967d4c14c1f3314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 22:20:49 +0100 Subject: [PATCH 06/10] Refactor SortingOptions JS --- .../javascripts/admin/bulk_product_update.js.coffee | 8 ++++---- .../admin/index_utils/services/sort_options.js.coffee | 5 +++++ .../admin/orders/controllers/orders_controller.js.coffee | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index 289cab1e74..6d51f2e597 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -107,10 +107,10 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.importDateFilter = "0" $scope.$watch 'sortOptions', (sort) -> - if sort && sort.predicate != "" - $scope.sorting = sort.predicate + ' desc' if sort.reverse - $scope.sorting = sort.predicate + ' asc' if !sort.reverse - $scope.fetchProducts() + return unless sort && sort.predicate != "" + + $scope.sorting = sort.getSortingExpr() + $scope.fetchProducts() , true confirm_unsaved_changes = () -> diff --git a/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee b/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee index 36f1bc4d4d..f926dfa373 100644 --- a/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee +++ b/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee @@ -3,6 +3,11 @@ angular.module("admin.indexUtils").factory 'SortOptions', -> predicate: "" reverse: true + getSortingExpr: () -> + sortingExpr = this.predicate + ' desc' if this.reverse + sortingExpr = this.predicate + ' asc' if !this.reverse + sortingExpr + toggle: (predicate) -> @reverse = (@predicate == predicate) && !@reverse @predicate = predicate diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index a2eb2323cb..d4d86b7ddb 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -64,10 +64,10 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque $scope.selected_orders.push order.id if $scope.select_all $scope.$watch 'sortOptions', (sort) -> - if sort && sort.predicate != "" - $scope.sorting = sort.predicate + ' desc' if sort.reverse - $scope.sorting = sort.predicate + ' asc' if !sort.reverse - $scope.fetchResults() + return unless sort && sort.predicate != "" + + $scope.sorting = sort.getSortingExpr() + $scope.fetchProducts() , true $scope.capturePayment = (order) -> From b248dc598eebb22bf26ae69d58609e9c51e3cb58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 4 Feb 2020 23:26:24 +0100 Subject: [PATCH 07/10] Cosmetics --- app/controllers/api/products_controller.rb | 2 +- .../api/products_controller_spec.rb | 88 +++++++++---------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 548b21cac0..96465c24cb 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -143,7 +143,7 @@ module Api end def query_params_with_defaults - params[:q].to_h.reverse_merge!({ 's' => 'created_at DESC' }) + params[:q].to_h.reverse_merge!('s' => 'created_at desc') end def pagination_data(results) diff --git a/spec/controllers/api/products_controller_spec.rb b/spec/controllers/api/products_controller_spec.rb index 8fb917afbf..5da8d89e32 100644 --- a/spec/controllers/api/products_controller_spec.rb +++ b/spec/controllers/api/products_controller_spec.rb @@ -207,62 +207,62 @@ describe Api::ProductsController, type: :controller do expect(json_response['name']).to eq("COPY OF #{product_with_image.name}") end end + end - describe '#bulk_products' do - context "as an enterprise user" do - let!(:taxon) { create(:taxon) } - let!(:product2) { create(:product, supplier: supplier, primary_taxon: taxon) } - let!(:product3) { create(:product, supplier: supplier2, primary_taxon: taxon) } - let!(:product4) { create(:product, supplier: supplier2) } - let(:current_api_user) { supplier_enterprise_user(supplier) } + describe '#bulk_products' do + context "as an enterprise user" do + let!(:taxon) { create(:taxon) } + let!(:product2) { create(:product, supplier: supplier, primary_taxon: taxon) } + let!(:product3) { create(:product, supplier: supplier2, primary_taxon: taxon) } + let!(:product4) { create(:product, supplier: supplier2) } + let(:current_api_user) { supplier_enterprise_user(supplier) } - before { current_api_user.enterprise_roles.create(enterprise: supplier2) } + before { current_api_user.enterprise_roles.create(enterprise: supplier2) } - it "returns a list of products" do - api_get :bulk_products, { page: 1, per_page: 15 }, format: :json - expect(returned_product_ids).to eq [product4.id, product3.id, product2.id, inactive_product.id, product.id] - end + it "returns a list of products" do + api_get :bulk_products, { page: 1, per_page: 15 }, format: :json + expect(returned_product_ids).to eq [product4.id, product3.id, product2.id, inactive_product.id, product.id] + end - it "returns pagination data" do - api_get :bulk_products, { page: 1, per_page: 15 }, format: :json - expect(json_response['pagination']).to eq "results" => 5, "pages" => 1, "page" => 1, "per_page" => 15 - end + it "returns pagination data" do + api_get :bulk_products, { page: 1, per_page: 15 }, format: :json + expect(json_response['pagination']).to eq "results" => 5, "pages" => 1, "page" => 1, "per_page" => 15 + end - it "uses defaults when page and per_page are not supplied" do - api_get :bulk_products, format: :json - expect(json_response['pagination']).to eq "results" => 5, "pages" => 1, "page" => 1, "per_page" => 15 - end + it "uses defaults when page and per_page are not supplied" do + api_get :bulk_products, format: :json + expect(json_response['pagination']).to eq "results" => 5, "pages" => 1, "page" => 1, "per_page" => 15 + end - it "returns paginated products by page" do - api_get :bulk_products, { page: 1, per_page: 2 }, format: :json - expect(returned_product_ids).to eq [product4.id, product3.id] + it "returns paginated products by page" do + api_get :bulk_products, { page: 1, per_page: 2 }, format: :json + expect(returned_product_ids).to eq [product4.id, product3.id] - api_get :bulk_products, { page: 2, per_page: 2 }, format: :json - expect(returned_product_ids).to eq [product2.id, inactive_product.id] - end + api_get :bulk_products, { page: 2, per_page: 2 }, format: :json + expect(returned_product_ids).to eq [product2.id, inactive_product.id] + end - it "filters results by supplier" do - api_get :bulk_products, { page: 1, per_page: 15, q: { supplier_id_eq: supplier.id } }, format: :json - expect(returned_product_ids).to eq [product2.id, inactive_product.id, product.id] - end + it "filters results by supplier" do + api_get :bulk_products, { page: 1, per_page: 15, q: { supplier_id_eq: supplier.id } }, format: :json + expect(returned_product_ids).to eq [product2.id, inactive_product.id, product.id] + end - it "filters results by product category" do - api_get :bulk_products, { page: 1, per_page: 15, q: { primary_taxon_id_eq: taxon.id } }, format: :json - expect(returned_product_ids).to eq [product3.id, product2.id] - end + it "filters results by product category" do + api_get :bulk_products, { page: 1, per_page: 15, q: { primary_taxon_id_eq: taxon.id } }, format: :json + expect(returned_product_ids).to eq [product3.id, product2.id] + end - it "filters results by import_date" do - product.variants.first.import_date = 1.day.ago - product2.variants.first.import_date = 2.days.ago - product3.variants.first.import_date = 1.day.ago + it "filters results by import_date" do + product.variants.first.import_date = 1.day.ago + product2.variants.first.import_date = 2.days.ago + product3.variants.first.import_date = 1.day.ago - product.save - product2.save - product3.save + product.save + product2.save + product3.save - api_get :bulk_products, { page: 1, per_page: 15, import_date: 1.day.ago.to_date.to_s }, format: :json - expect(returned_product_ids).to eq [product3.id, product.id] - end + api_get :bulk_products, { page: 1, per_page: 15, import_date: 1.day.ago.to_date.to_s }, format: :json + expect(returned_product_ids).to eq [product3.id, product.id] end end end From 212413c8b3a07693d53e56bad9d31e2a5be801e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Thu, 6 Feb 2020 11:12:47 +0100 Subject: [PATCH 08/10] Avoid mutable q params --- app/controllers/api/products_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 96465c24cb..42413e30f4 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -143,7 +143,7 @@ module Api end def query_params_with_defaults - params[:q].to_h.reverse_merge!('s' => 'created_at desc') + params[:q].to_h.reverse_merge('s' => 'name asc') end def pagination_data(results) From 523b2663081fe0b8c8d5baf3e0e3ce1ee2979daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 11 Feb 2020 22:30:44 +0100 Subject: [PATCH 09/10] Put back created_at desc as default order --- app/controllers/api/products_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 42413e30f4..b68057623a 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -143,7 +143,7 @@ module Api end def query_params_with_defaults - params[:q].to_h.reverse_merge('s' => 'name asc') + params[:q].to_h.reverse_merge('s' => 'created desc') end def pagination_data(results) From 4c7bd4d6a85ac06cf1d6e0e1928110965d5adbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Thu, 13 Feb 2020 06:37:45 +0100 Subject: [PATCH 10/10] Fix mess with order --- app/controllers/api/products_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index b68057623a..a45e9a8aea 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -143,7 +143,7 @@ module Api end def query_params_with_defaults - params[:q].to_h.reverse_merge('s' => 'created desc') + params[:q].to_h.reverse_merge(s: 'created_at desc') end def pagination_data(results)