mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-26 01:33:22 +00:00
Merge pull request #12745 from johansenja/optimise-shops-page5
Improve effiency of OrderCycle.earliest_closing_times
This commit is contained in:
@@ -155,9 +155,8 @@ class OrderCycle < ApplicationRecord
|
||||
joins(:order_cycle).
|
||||
merge(OrderCycle.active).
|
||||
group('exchanges.receiver_id').
|
||||
select("exchanges.receiver_id AS receiver_id,
|
||||
MIN(order_cycles.orders_close_at) AS earliest_close_at").
|
||||
map { |ex| [ex.receiver_id, ex.earliest_close_at.to_time] }
|
||||
pluck(Arel.sql("exchanges.receiver_id AS receiver_id"),
|
||||
Arel.sql("MIN(order_cycles.orders_close_at) AS earliest_close_at"))
|
||||
]
|
||||
end
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ module Api
|
||||
attributes :orders_close_at, :active
|
||||
|
||||
def orders_close_at
|
||||
options[:data].earliest_closing_times[object.id]
|
||||
options[:data].earliest_closing_times[object.id]&.to_time
|
||||
end
|
||||
|
||||
def active
|
||||
|
||||
36
spec/serializers/api/uncached_enterprise_serializer_spec.rb
Normal file
36
spec/serializers/api/uncached_enterprise_serializer_spec.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Api::UncachedEnterpriseSerializer do
|
||||
let(:serializer) {
|
||||
described_class.new enterprise, { data: OpenFoodNetwork::EnterpriseInjectionData.new }
|
||||
}
|
||||
let(:enterprise) { create :enterprise }
|
||||
|
||||
before do
|
||||
allow_any_instance_of(OpenFoodNetwork::EnterpriseInjectionData).to(
|
||||
receive(:earliest_closing_times).
|
||||
and_return(data)
|
||||
)
|
||||
end
|
||||
|
||||
describe '#orders_close_at' do
|
||||
context "for an enterprise with an active order cycle" do
|
||||
let(:order_cycle) { create :open_order_cycle, coordinator: enterprise }
|
||||
let(:data) { { enterprise.id => order_cycle.orders_close_at } }
|
||||
|
||||
it "returns a closing time for an enterprise" do
|
||||
expect(serializer.orders_close_at).to eq order_cycle.orders_close_at
|
||||
end
|
||||
end
|
||||
|
||||
context "for an enterprise without an active order cycle" do
|
||||
let(:data) { {} }
|
||||
|
||||
it "returns nil for an enterprise without a closing time" do
|
||||
expect(serializer.orders_close_at).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user