mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Fetch Property instead of ProducerProps from query
By not having to treat producer properties differently we can filter and fetch all properties from DB without having to process it with Ruby and with a single query.
This commit is contained in:
@@ -85,17 +85,34 @@ module Api
|
||||
def distributed_properties
|
||||
if active
|
||||
product_properties = Spree::Property.currently_sold_by(enterprise)
|
||||
producer_properties = ProducerProperty.currently_sold_by(enterprise)
|
||||
else
|
||||
product_properties = Spree::Property.ever_sold_by(enterprise)
|
||||
producer_properties = ProducerProperty.ever_sold_by(enterprise)
|
||||
product_properties = Spree::Property
|
||||
.joins(products: { variants: { exchanges: :order_cycle } })
|
||||
.merge(Exchange.outgoing)
|
||||
.merge(Exchange.to_enterprise(enterprise))
|
||||
.select('DISTINCT spree_properties.*')
|
||||
end
|
||||
|
||||
(product_properties + producer_properties).uniq do |property_object|
|
||||
(product_properties + distributed_producer_properties).uniq do |property_object|
|
||||
property_object.property.presentation
|
||||
end
|
||||
end
|
||||
|
||||
def distributed_producer_properties
|
||||
properties = Spree::Property
|
||||
.joins(
|
||||
producer_properties: {
|
||||
producer: { supplied_products: { variants: { exchanges: :order_cycle } } }
|
||||
}
|
||||
)
|
||||
.merge(Exchange.outgoing)
|
||||
.merge(Exchange.to_enterprise(enterprise))
|
||||
.select('DISTINCT spree_properties.*')
|
||||
|
||||
return properties.merge(OrderCycle.active) if active
|
||||
properties
|
||||
end
|
||||
|
||||
def active
|
||||
data.active_distributors.andand.include? enterprise
|
||||
end
|
||||
|
||||
@@ -33,10 +33,10 @@ describe Api::CachedEnterpriseSerializer do
|
||||
|
||||
let(:property) { create(:property, presentation: 'One') }
|
||||
let(:duplicate_property) { create(:property, presentation: 'One') }
|
||||
let(:producer) { create(:supplier_enterprise, properties: [duplicate_property]) }
|
||||
|
||||
before do
|
||||
product = create(:product, properties: [property])
|
||||
producer = create(:supplier_enterprise, properties: [duplicate_property])
|
||||
producer.supplied_products << product
|
||||
|
||||
create(
|
||||
@@ -57,6 +57,14 @@ describe Api::CachedEnterpriseSerializer do
|
||||
properties = cached_enterprise_serializer.distributed_properties
|
||||
expect(properties).to eq([property])
|
||||
end
|
||||
|
||||
it 'fetches producer properties' do
|
||||
distributed_producer_properties = cached_enterprise_serializer
|
||||
.distributed_producer_properties
|
||||
|
||||
expect(distributed_producer_properties)
|
||||
.to eq(producer.producer_properties.map(&:property))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the enterprise is an active distributor' do
|
||||
@@ -68,6 +76,14 @@ describe Api::CachedEnterpriseSerializer do
|
||||
properties = cached_enterprise_serializer.distributed_properties
|
||||
expect(properties).to eq([property])
|
||||
end
|
||||
|
||||
it 'fetches producer properties' do
|
||||
distributed_producer_properties = cached_enterprise_serializer
|
||||
.distributed_producer_properties
|
||||
|
||||
expect(distributed_producer_properties)
|
||||
.to eq(producer.producer_properties.map(&:property))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user