Add products and producers to endpoint

This commit is contained in:
Ana Nunes da Silva
2024-07-08 15:49:53 +01:00
committed by David Cook
parent d316418eff
commit 99d7a630c0
4 changed files with 80 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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