mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-14 23:47:48 +00:00
Add products and producers to endpoint
This commit is contained in:
committed by
David Cook
parent
d316418eff
commit
99d7a630c0
@@ -13,6 +13,11 @@ module DfcProvider
|
||||
def affiliate_sales_data
|
||||
render json: DfcIo.export(
|
||||
AffiliateSalesDataBuilder.build_person(user),
|
||||
*AffiliateSalesDataBuilder.build_addresses,
|
||||
*AffiliateSalesDataBuilder.build_producers,
|
||||
*AffiliateSalesDataBuilder.build_supplied_products,
|
||||
*AffiliateSalesDataBuilder.build_catalogue_items,
|
||||
*AffiliateSalesDataBuilder.build_offers,
|
||||
*AffiliateSalesDataBuilder.build_order_lines,
|
||||
*AffiliateSalesDataBuilder.build_orders
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# rubocop:disable Metrics/ClassLength
|
||||
class AffiliateSalesDataBuilder < DfcBuilder
|
||||
class << self
|
||||
def build_person(user)
|
||||
@@ -16,6 +17,26 @@ class AffiliateSalesDataBuilder < DfcBuilder
|
||||
enterprises.map { |enterprise| build_enterprise(enterprise.id) }
|
||||
end
|
||||
|
||||
def build_addresses
|
||||
sales_data.map { |sale| build_address(sale) }
|
||||
end
|
||||
|
||||
def build_producers
|
||||
sales_data.map { |sale| build_producer(sale) }
|
||||
end
|
||||
|
||||
def build_supplied_products
|
||||
sales_data.map { |sale| build_supplied_product(sale) }
|
||||
end
|
||||
|
||||
def build_catalogue_items
|
||||
sales_data.map { |sale| build_catalogue_item(sale) }
|
||||
end
|
||||
|
||||
def build_offers
|
||||
sales_data.map { |sale| build_offer(sale) }
|
||||
end
|
||||
|
||||
def build_order_lines
|
||||
sales_data.map { |sale| build_order_line(sale) }
|
||||
end
|
||||
@@ -34,6 +55,54 @@ class AffiliateSalesDataBuilder < DfcBuilder
|
||||
DataFoodConsortium::Connector::Enterprise.new(urls.enterprise_url(id))
|
||||
end
|
||||
|
||||
def build_address(sale)
|
||||
DataFoodConsortium::Connector::Address.new(
|
||||
urls.address_url(sale.producer_id),
|
||||
postalCode: sale.producer_postcode,
|
||||
country: nil,
|
||||
latitude: nil,
|
||||
longitude: nil,
|
||||
region: nil,
|
||||
street: nil,
|
||||
city: 'test'
|
||||
)
|
||||
end
|
||||
|
||||
def build_producer(sale)
|
||||
DataFoodConsortium::Connector::Enterprise.new(
|
||||
urls.enterprise_url(sale.producer_id),
|
||||
suppliedProducts: build_supplied_product(sale),
|
||||
localizations: build_address(sale)
|
||||
)
|
||||
end
|
||||
|
||||
def build_supplied_product(sale)
|
||||
DataFoodConsortium::Connector::SuppliedProduct.new(
|
||||
urls.enterprise_supplied_product_url(sale.producer_id, sale.product_id),
|
||||
name: sale.product_name,
|
||||
description: nil,
|
||||
alcoholPercentage: nil,
|
||||
lifetime: nil,
|
||||
usageOrStorageConditions: nil,
|
||||
totalTheoreticalStock: nil,
|
||||
catalogItems: build_catalogue_item(sale),
|
||||
quantity: build_quantity(sale)
|
||||
)
|
||||
end
|
||||
|
||||
def build_catalogue_item(sale)
|
||||
DataFoodConsortium::Connector::CatalogItem.new(
|
||||
urls.enterprise_catalog_item_url(sale.producer_id, sale.product_id),
|
||||
offers: build_offer(sale)
|
||||
)
|
||||
end
|
||||
|
||||
def build_offer(sale)
|
||||
DataFoodConsortium::Connector::Offer.new(
|
||||
urls.enterprise_offer_url(sale.producer_id, sale.product_id)
|
||||
)
|
||||
end
|
||||
|
||||
def build_order_line(sale)
|
||||
DataFoodConsortium::Connector::OrderLine.new(
|
||||
urls.enterprise_order_order_line_url(sale.producer_id, sale.order_id, sale.line_item_id),
|
||||
@@ -81,3 +150,4 @@ class AffiliateSalesDataBuilder < DfcBuilder
|
||||
end
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/ClassLength
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class AffiliateSalesQuery
|
||||
class << self
|
||||
def call
|
||||
@@ -27,6 +29,7 @@ class AffiliateSalesQuery
|
||||
<<~SQL.squish
|
||||
spree_orders.id AS order_id,
|
||||
spree_orders.created_at AS order_date,
|
||||
spree_products.id AS product_id,
|
||||
spree_products.name AS product_name,
|
||||
spree_variants.display_name AS unit_name,
|
||||
spree_products.variant_unit AS unit_type,
|
||||
@@ -47,6 +50,7 @@ class AffiliateSalesQuery
|
||||
def sales_data_group
|
||||
<<~SQL.squish
|
||||
spree_orders.id,
|
||||
spree_products.id,
|
||||
spree_products.name,
|
||||
spree_variants.display_name,
|
||||
spree_variants.unit_value,
|
||||
|
||||
@@ -8,6 +8,7 @@ DfcProvider::Engine.routes.draw do
|
||||
resources :supplied_products, only: [:create, :show, :update]
|
||||
resources :social_medias, only: [:show]
|
||||
resources :sale_sessions, only: [:show]
|
||||
resources :offers, only: [:show]
|
||||
resources :orders, only: [:show] do
|
||||
resources :order_lines, only: [:show]
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user