Class: Edi::Wayfair::CatalogItemInformationRetriever
- Inherits:
-
BaseEdiService
- Object
- BaseService
- BaseEdiService
- Edi::Wayfair::CatalogItemInformationRetriever
- Defined in:
- app/services/edi/wayfair/catalog_item_information_retriever.rb
Overview
Retrieves catalog item information from the Wayfair Supplier Catalog API
Uses the product-catalog-api endpoint to fetch product details including:
- productId (Wayfair's internal ID, basis for the W-prefixed SKU)
- supplierPartNumber (our internal SKU)
- skus with variant details (displaySku, retailPrice, etc.)
API Documentation: https://developer.wayfair.io/posts/catalog-read
Constant Summary collapse
- CATALOG_API_URL =
Catalog API uses a different endpoint than the Orders API
Documentation: https://developer.wayfair.io/posts/catalog-read 'https://api.wayfair.io/v1/supplier-catalog-api/graphql'- SANDBOX_CATALOG_API_URL =
'https://api.wayfair.io/sandbox/v1/supplier-catalog-api/graphql'- SUPPLIER_CATALOG_QUERY_WITH_FILTER =
GraphQL query to retrieve product catalog information (with filter)
Key fields:- productId: Wayfair's product ID (e.g., 1001)
- supplierPartNumber: Our SKU (e.g., "WRM1245")
- skus[].sku: Wayfair's variant SKU
- skus[].displaySku: Customer-facing SKU (e.g., "W001498355")
- skus[].retailPrice: Current pricing
<<~GRAPHQL.squish query GetSupplierCatalog($supplierId: Int!, $filter: ProductFilter, $paginationOptions: PaginationOptions) { supplierCatalog(supplierId: $supplierId, filter: $filter, paginationOptions: $paginationOptions) { supplierId pageInfo { page pageSize totalPages hasNextPage } products { productId supplierPartNumber status upc skus { isLive sku displaySku productName className classId retailPrice { unit { amount currency } item { amount currency } } urls status productDimensions { lengthUnit depth height width weightUnit weight } primaryImage { id url } } images { id url } manufacturerPart { partId partNumber } } } } GRAPHQL
- SUPPLIER_CATALOG_QUERY_SIMPLE =
Simpler query without filter for pagination-only requests
<<~GRAPHQL.squish query GetSupplierCatalog($supplierId: Int!, $paginationOptions: PaginationOptions) { supplierCatalog(supplierId: $supplierId, paginationOptions: $paginationOptions) { supplierId pageInfo { page pageSize totalPages hasNextPage } products { productId supplierPartNumber status skus { sku displaySku productName retailPrice { unit { amount currency } } primaryImage { url } } } } } GRAPHQL
Constants included from AddressAbbreviator
AddressAbbreviator::MAX_LENGTH
Instance Attribute Summary
Attributes inherited from BaseEdiService
Instance Method Summary collapse
-
#process(supplier_part_number:, file_info: {}) ⇒ EdiCommunicationLog?
Process retrieval for a specific supplier part number (our SKU).
-
#process_all(page: 1, page_size: 25, file_info: {}) ⇒ EdiCommunicationLog?
Fetch all products for the supplier (paginated).
Methods inherited from BaseEdiService
#duplicate_po_already_notified?, #initialize, #mark_duplicate_po_as_notified, #report_order_creation_issues, #safe_process_edi_communication_log
Methods included from AddressAbbreviator
#abbreviate_street, #collect_street_originals, #record_address_abbreviation_notes
Methods inherited from BaseService
#initialize, #log_debug, #log_error, #log_info, #log_warning, #logger, #options, #tagged_logger
Constructor Details
This class inherits a constructor from Edi::BaseEdiService
Instance Method Details
#process(supplier_part_number:, file_info: {}) ⇒ EdiCommunicationLog?
Process retrieval for a specific supplier part number (our SKU)
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/services/edi/wayfair/catalog_item_information_retriever.rb', line 84 def process(supplier_part_number:, file_info: {}) supplier_id = orchestrator.try(:warehouse_code)&.to_i raise ArgumentError, "Warehouse code (supplier_id) not configured for #{orchestrator.partner}" if supplier_id.blank? || supplier_id.zero? variables = { supplierId: supplier_id, filter: { supplierPartNumber: { in: [supplier_part_number] } }, paginationOptions: { page: 1, pageSize: 10 } } fetch_catalog_data(variables: variables, file_info: file_info, use_filter: true) end |
#process_all(page: 1, page_size: 25, file_info: {}) ⇒ EdiCommunicationLog?
Fetch all products for the supplier (paginated)
108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'app/services/edi/wayfair/catalog_item_information_retriever.rb', line 108 def process_all(page: 1, page_size: 25, file_info: {}) supplier_id = orchestrator.try(:warehouse_code)&.to_i raise ArgumentError, "Warehouse code (supplier_id) not configured for #{orchestrator.partner}" if supplier_id.blank? || supplier_id.zero? variables = { supplierId: supplier_id, paginationOptions: { page: page, pageSize: page_size } } fetch_catalog_data(variables: variables, file_info: file_info, use_filter: false) end |