diff --git a/actions/check-product-changes/poller.js b/actions/check-product-changes/poller.js index ee11b98..68c4d3a 100644 --- a/actions/check-product-changes/poller.js +++ b/actions/check-product-changes/poller.js @@ -12,7 +12,8 @@ governing permissions and limitations under the License. const { Timings, aggregate } = require('./lib/benchmark'); const { AdminAPI } = require('./lib/aem'); -const { queries, requestSaaS, requestSpreadsheet, isValidUrl } = require('../utils'); +const { requestSaaS, requestSpreadsheet, isValidUrl } = require('../utils'); +const { GetAllSkusQuery, GetLastModifiedQuery } = require('../queries'); const { Core } = require('@adobe/aio-sdk'); const BATCH_SIZE = 50; @@ -153,7 +154,7 @@ async function poll(params, stateLib) { // check if the skus were last queried within the last 10 minutes if (timings.now - state.skusLastQueriedAt >= skusRefreshInterval) { state.skusLastQueriedAt = new Date(); - const allSkusResp = await requestSaaS(queries.getAllSkus, 'getAllSkus', {}, context); + const allSkusResp = await requestSaaS(GetAllSkusQuery, 'getAllSkus', {}, context); const allSkus = allSkusResp.data.productSearch.items .map(({ productView }) => productView || {}) .filter(Boolean); @@ -170,7 +171,7 @@ async function poll(params, stateLib) { // get last modified dates const skus = Object.keys(state.skus); - const lastModifiedResp = await requestSaaS(queries.getLastModified, 'getLastModified', { skus }, context); + const lastModifiedResp = await requestSaaS(GetLastModifiedQuery, 'getLastModified', { skus }, context); timings.sample('fetchedLastModifiedDates'); log.info(`Fetched last modified date for ${lastModifiedResp.data.products.length} skus, total ${skus.length}`); diff --git a/actions/pdp-renderer/index.js b/actions/pdp-renderer/index.js index 767f517..df7a1f1 100644 --- a/actions/pdp-renderer/index.js +++ b/actions/pdp-renderer/index.js @@ -15,10 +15,9 @@ const path = require('path'); const { Core } = require('@adobe/aio-sdk') const Handlebars = require('handlebars'); - const { errorResponse, stringParameters, requestSaaS } = require('../utils'); const { extractPathDetails, findDescription, prepareBaseTemplate, getPrimaryImage, generatePriceString, getImageList } = require('./lib'); -const { ProductQuery } = require('./queries'); +const { ProductQuery } = require('../queries'); const { generateLdJson } = require('./ldJson'); function toTemplateProductData(baseProduct) { diff --git a/actions/pdp-renderer/ldJson.js b/actions/pdp-renderer/ldJson.js index 93a8e22..74cc52f 100644 --- a/actions/pdp-renderer/ldJson.js +++ b/actions/pdp-renderer/ldJson.js @@ -1,6 +1,6 @@ const { requestSaaS } = require('../utils'); const { getProductUrl, findDescription, getPrimaryImage } = require('./lib'); -const { VariantsQuery } = require('./queries'); +const { VariantsQuery } = require('../queries'); function getOffer(product, url) { const { sku, inStock, price } = product; diff --git a/actions/pdp-renderer/queries.js b/actions/pdp-renderer/queries.js deleted file mode 100644 index e10504f..0000000 --- a/actions/pdp-renderer/queries.js +++ /dev/null @@ -1,115 +0,0 @@ -const ProductQuery = `query ProductQuery($sku: String!) { - products(skus: [$sku]) { - __typename - id - sku - name - url - description - shortDescription - metaDescription - metaKeyword - metaTitle - urlKey - inStock - externalId - lastModifiedAt - images(roles: []) { - url - label - roles - } - attributes(roles: ["visible_in_pdp"]) { - name - label - value - roles - } - ... on SimpleProductView { - price { - ...priceFields - } - } - ... on ComplexProductView { - options { - id - title - required - values { - id - title - inStock - ... on ProductViewOptionValueSwatch { - type - value - } - } - } - priceRange { - maximum { - ...priceFields - } - minimum { - ...priceFields - } - } - } - } -} -fragment priceFields on ProductViewPrice { - roles - regular { - amount { - currency - value - } - } - final { - amount { - currency - value - } - } -}`; - -const VariantsQuery = `query VariantsQuery($sku: String!) { - variants(sku: $sku) { - variants { - selections - product { - sku - name - inStock - images(roles: []) { - url - roles - } - attributes(roles: ["visible_in_pdp"]) { - name - label - value - roles - } - ... on SimpleProductView { - price { - roles - regular { - amount { - value - currency - } - } - final { - amount { - value - currency - } - } - } - } - } - } - } -}`; - -module.exports = { ProductQuery, VariantsQuery }; \ No newline at end of file diff --git a/actions/queries.js b/actions/queries.js new file mode 100644 index 0000000..00e7c1a --- /dev/null +++ b/actions/queries.js @@ -0,0 +1,156 @@ +const ProductQuery = `query ProductQuery($sku: String!) { + products(skus: [$sku]) { + __typename + id + sku + name + url + description + shortDescription + metaDescription + metaKeyword + metaTitle + urlKey + inStock + externalId + lastModifiedAt + images(roles: []) { + url + label + roles + } + attributes(roles: ["visible_in_pdp"]) { + name + label + value + roles + } + ... on SimpleProductView { + price { + ...priceFields + } + } + ... on ComplexProductView { + options { + id + title + required + values { + id + title + inStock + ... on ProductViewOptionValueSwatch { + type + value + } + } + } + priceRange { + maximum { + ...priceFields + } + minimum { + ...priceFields + } + } + } + } + } + fragment priceFields on ProductViewPrice { + roles + regular { + amount { + currency + value + } + } + final { + amount { + currency + value + } + } + }`; + +const VariantsQuery = `query VariantsQuery($sku: String!) { + variants(sku: $sku) { + variants { + selections + product { + sku + name + inStock + images(roles: []) { + url + roles + } + attributes(roles: ["visible_in_pdp"]) { + name + label + value + roles + } + ... on SimpleProductView { + price { + roles + regular { + amount { + value + currency + } + } + final { + amount { + value + currency + } + } + } + } + } + } + } + }`; + +const GetAllSkusQuery = ` + query getAllSkus { + productSearch(phrase: "", page_size: 500) { + items { + productView { + urlKey + sku + } + } + } + } +`; + +const GetLastModifiedQuery = ` + query getLastModified($skus: [String]!) { + products(skus: $skus) { + sku + urlKey + lastModifiedAt + } + } +`; + +const GetAllSkusPaginatedQuery = `query getAllSkusPaginated($currentPage: Int!) { + productSearch(phrase: "", page_size: 500, current_page: $currentPage) { + items { + productView { + urlKey + sku + } + } + } +} +`; + +module.exports = { + ProductQuery, + VariantsQuery, + GetAllSkusQuery, + GetAllSkusPaginatedQuery, + GetLastModifiedQuery, +}; \ No newline at end of file diff --git a/tools/check-products-count.js b/tools/check-products-count.js index 5f5f44e..34ca06f 100644 --- a/tools/check-products-count.js +++ b/tools/check-products-count.js @@ -12,8 +12,8 @@ governing permissions and limitations under the License. require('dotenv').config(); -const { performSaaSQuery, queries } = require('../actions/check-product-changes/lib/commerce'); -const { getSpreadsheet } = require('../actions/check-product-changes/lib/aem'); +const { requestSaaS, requestSpreadsheet } = require('../actions/utils'); +const { GetAllSkusPaginatedQuery } = require('../actions/queries'); async function main() { // TODO: fetch from app.config.yaml (incl. mapped env vars)? @@ -26,10 +26,10 @@ async function main() { } = process.env; const context = { storeCode, storeUrl, configName }; - const { total: actualCount } = await getSpreadsheet('published-products-index', context); + const { total: actualCount } = await requestSpreadsheet('published-products-index', context); let [productsCount, currentPage, expectedCount] = [-1, 1, 0]; while (productsCount !== 0) { - const { data: { productSearch: { items: products } } } = await performSaaSQuery(queries.getAllSkusPaginated, 'getAllSkusPaginated', { currentPage }, context); + const { data: { productSearch: { items: products } } } = await requestSaaS(GetAllSkusPaginatedQuery, 'getAllSkusPaginated', { currentPage }, context); productsCount = products.length; expectedCount += productsCount; currentPage++;