Merge pull request #12745 from johansenja/optimise-shops-page5

Improve effiency of OrderCycle.earliest_closing_times
This commit is contained in:
Konrad
2024-08-18 14:40:49 +02:00
committed by GitHub
3 changed files with 39 additions and 4 deletions

View File

@@ -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

View File

@@ -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

View 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