From 1c702b180646f5b93083b524a62a27ee938fc8a6 Mon Sep 17 00:00:00 2001 From: Nicholas Speeter Date: Tue, 20 Apr 2021 12:44:56 -0400 Subject: [PATCH 1/2] refactor: addition of fetch product by sku,or id, or key and test data file. --- data/Test0.csv | 5 +++ src/coffee/validator.coffee | 76 ++++++++++++++++++++++++++++++++++++- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 data/Test0.csv diff --git a/data/Test0.csv b/data/Test0.csv new file mode 100644 index 00000000..97836194 --- /dev/null +++ b/data/Test0.csv @@ -0,0 +1,5 @@ +productType,variantId,sku,brand +,1,7200370559001,Test +,2,7568907,Test2 +,3,7465890,Test3 +,4,654738,Test4 \ No newline at end of file diff --git a/src/coffee/validator.coffee b/src/coffee/validator.coffee index f513ba58..74384cbe 100644 --- a/src/coffee/validator.coffee +++ b/src/coffee/validator.coffee @@ -98,6 +98,56 @@ class Validator @channels.buildMaps channels Promise.resolve resources + fetchProductBySku: (sku) -> + options = + projectKey: @projectKey + customServices: {} + service = createRequestBuilder(options) + productUri = service.products + .where( + `masterData(current(masterVariant(sku ="${sku}" or sku ="${sku}")))` + ) + .build(); + productRequest = + uri: productUri + method: 'GET' + @client.execute(productRequest).then((result) -> + hasProductTypeColumn and row[@header.toIndex(CONS.HEADER_VARIANT_ID)] == result.body.results[0].masterData.masterVariant.sku + ).catch (error) -> + error + + fetchProductByKey: (key) -> + options = + projectKey: @projectKey + customServices: {} + service = createRequestBuilder(options) + productUri = service.products.byKey(key).build() + productRequest = + uri: productUri + method: 'GET' + @client.execute(productRequest).then((result) -> + hasProductTypeColumn and row[@header.toIndex(CONS.HEADER_VARIANT_ID)] == result.body.results[0].masterData.masterVariant.sku + ).catch (error) -> + error + + fetchProductById: (id) -> + options = + projectKey: @projectKey + customServices: {} + service = createRequestBuilder(options) + productUri = service.products.byId(id).build() + productRequest = + uri: productUri + method: 'GET' + @client.execute(productRequest).then((result) -> + hasProductTypeColumn and row[@header.toIndex(CONS.HEADER_VARIANT_ID)] == result.body.results[0].masterData.masterVariant.sku + ).catch (error) -> + error + +# --- + +# --- + validateOnline: -> # TODO: too much parallel? # TODO: is it ok storing everything in memory? @@ -210,7 +260,31 @@ class Validator isProduct: (row, variantColumn) -> hasProductTypeColumn = not _.isBlank(row[@header.toIndex(CONS.HEADER_PRODUCT_TYPE)]) if variantColumn is CONS.HEADER_VARIANT_ID - hasProductTypeColumn and row[@header.toIndex(CONS.HEADER_VARIANT_ID)] is '1' + if row[this.header.toIndex(CONS.HEADER_SKU)] + if (row[this.header.toIndex(CONS.HEADER_SKU)]) { + #check if sku exists, if so fetch product information and detect the master variant + let sku = row[this.header.toIndex(CONS.HEADER_SKU)]; + return fetchProductBySku(sku).then(function(result) { + return result; + }); + } else if (variantColumn === CONS.HEADER_ID) { + #check by id + let id = row[this.header.toIndex(CONS.HEADER_ID)]; + return fetchProductById(id).then(function(result) { + return result; + }); + } else if (variantColumn === CONS.HEADER_KEY) { + #check by key + let key = row[this.header.toIndex(CONS.HEADER_KEY)]; + return fetchProductByKey(key).then(function(result) { + return result; + }); + } else { + return ( + hasProductTypeColumn && + row[this.header.toIndex(CONS.HEADER_VARIANT_ID)] === "1" + ); #hasProductTypeColumn and row[@header.toIndex(CONS.HEADER_VARIANT_ID)] is '1' + } else hasProductTypeColumn From 9ce1cf7ce230f4f27eb027fbed817f574dcc1566 Mon Sep 17 00:00:00 2001 From: Nicholas Speeter Date: Tue, 20 Apr 2021 15:06:18 -0400 Subject: [PATCH 2/2] fix: use for javascript in coffee file --- src/coffee/validator.coffee | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/coffee/validator.coffee b/src/coffee/validator.coffee index 74384cbe..c1968c66 100644 --- a/src/coffee/validator.coffee +++ b/src/coffee/validator.coffee @@ -260,14 +260,13 @@ class Validator isProduct: (row, variantColumn) -> hasProductTypeColumn = not _.isBlank(row[@header.toIndex(CONS.HEADER_PRODUCT_TYPE)]) if variantColumn is CONS.HEADER_VARIANT_ID - if row[this.header.toIndex(CONS.HEADER_SKU)] - if (row[this.header.toIndex(CONS.HEADER_SKU)]) { + `if (row[this.header.toIndex(CONS.HEADER_SKU)]) { #check if sku exists, if so fetch product information and detect the master variant let sku = row[this.header.toIndex(CONS.HEADER_SKU)]; return fetchProductBySku(sku).then(function(result) { return result; }); - } else if (variantColumn === CONS.HEADER_ID) { + } else if (variantColumn === CONS.HEADER_ID) { #check by id let id = row[this.header.toIndex(CONS.HEADER_ID)]; return fetchProductById(id).then(function(result) { @@ -284,7 +283,7 @@ class Validator hasProductTypeColumn && row[this.header.toIndex(CONS.HEADER_VARIANT_ID)] === "1" ); #hasProductTypeColumn and row[@header.toIndex(CONS.HEADER_VARIANT_ID)] is '1' - } + }` else hasProductTypeColumn