commit 13faf2ff38d84364608095c85c54e66f7437952e Author: hmalik144 Date: Fri Aug 14 14:55:34 2020 +0100 Create wix_functions.js diff --git a/wix_functions.js b/wix_functions.js new file mode 100644 index 0000000..468877a --- /dev/null +++ b/wix_functions.js @@ -0,0 +1,289 @@ +import { ok, notFound, badRequest } from 'wix-http-functions'; +import wixData from 'wix-data'; + +// URL to call this HTTP function from your published site looks like: +// Premium site - https://mysite.com/_functions/example/multiply?leftOperand=3&rightOperand=4 +// Free site - https://username.wixsite.com/mysite/_functions/example/multiply?leftOperand=3&rightOperand=4 + +// URL to test this HTTP function from your saved site looks like: +// Premium site - https://mysite.com/_functions-dev/example/multiply?leftOperand=3&rightOperand=4 +// Free site - https://username.wixsite.com/mysite/_functions-dev/example/multiply?leftOperand=3&rightOperand=4 + +// test - https://www.mochee.co.uk/_functions-dev/googleMerchantCentreData +export function get_googleMerchantCentreData(request) { + // Response object with content type set + const response = { + "headers": { + "Content-Type": "application/json" + } + }; + // get wixData query + let queryProducts = wixData.query("Stores/Products").find() + // Answer query promise + return queryProducts.then(results => { + // return list of products in response + if (results.items.length > 0) { + let itemList = results.items.map(f => + createMerchantObject(f) + ) + + response.body = itemList + + return ok(response) + } + // nothing found - return not found 404 error + return notFound(response) + }, error => { + // error trying to execute query - return 400 error + response.body = { + "error": error + } + return badRequest(response) + }) +} + +function createMerchantObject(item) { + let obj = { + "id": item._id, //M + "offerId": item._id, + "title": item.name, //M + "description": item.description, //M + "link": "https://www.mochee.co.uk".concat(item.productPageUrl), //M + "imageLink": "https://static.wixstatic.com/media".concat(item.mediaItems[0].id), //M + "additionalImageLinks": item.mediaItems.map(f => + "https://static.wixstatic.com/media".concat(f.id) + ), + "contentLanguage": "en", + // "targetCountry": string, + // "channel": string, + // "expirationDate": string, + // "adult": boolean, + "ageGroup": "adult", //M + // "kind": string, + "availability": getStockString(item.inStock), //M + "brand": "Mochee", //M + // "color": "", //M + "condition": "new", //M + "gender": "male", //M + "googleProductCategory": "Clothing & Accessories > Clothing > Outerwear > Coats & Jackets", //M + // "gtin": string, + // "itemGroupId": string, + // "material": "", + "mpn": item._id, //M + // "pattern": "", + "price": { + "value": item.price, //M + "currency": item.currency //M + }, + // "productType": string, + "salePrice": { + "value": item.discountedPrice, + "currency": item.currency + }, + // "salePriceEffectiveDate": string, + // "shipping": [ + // { + // object (ProductShipping) + // } + // ], + // "shippingWeight": { + // object (ProductShippingWeight) + // }, + "sizes": getSizesFromProductInfo(item.productOptions) + // , + // "taxes": [ + // { + // object (ProductTax) + // } + // ], + // "adwordsGrouping": string, + // "adwordsLabels": [ + // string + // ], + // "adwordsRedirect": string, + // "destinations": [ + // { + // object (ProductDestination) + // } + // ], + // "validatedDestinations": [ + // string + // ], + // "customAttributes": [ + // { + // object (CustomAttribute) + // } + // ], + // "customGroups": [ + // { + // object (CustomGroup) + // } + // ], + // "warnings": [ + // { + // object (Error) + // } + // ], + // "energyEfficiencyClass": string, + // "identifierExists": boolean, + // "installment": { + // object (Installment) + // }, + // "loyaltyPoints": { + // object (LoyaltyPoints) + // }, + // "onlineOnly": boolean, + // "multipack": string, + // "customLabel0": string, + // "customLabel1": string, + // "customLabel2": string, + // "customLabel3": string, + // "customLabel4": string, + // "isBundle": boolean, + // "mobileLink": string, + // "availabilityDate": string, + // "sizeSystem": string, + // "sizeType": string, + // "shippingLabel": string, + // "unitPricingMeasure": { + // object (ProductUnitPricingMeasure) + // }, + // "unitPricingBaseMeasure": { + // object (ProductUnitPricingBaseMeasure) + // }, + // "shippingLength": { + // object (ProductShippingDimension) + // }, + // "shippingWidth": { + // object (ProductShippingDimension) + // }, + // "shippingHeight": { + // object (ProductShippingDimension) + // }, + // "displayAdsId": string, + // "displayAdsSimilarIds": [ + // string + // ], + // "displayAdsTitle": string, + // "displayAdsLink": string, + // "displayAdsValue": number, + // "aspects": [ + // { + // object (ProductAspect) + // } + // ], + // "sellOnGoogleQuantity": string, + // "promotionIds": [ + // string + // ], + // "additionalProductTypes": [ + // string + // ], + // "maxHandlingTime": string, + // "minHandlingTime": string, + } + return obj +} + +// test - https://www.mochee.co.uk/_functions-dev/googleMerchantCentreDataText +export function get_googleMerchantCentreDataText(request) { + // Response object with content type set + const response = { + "headers": { + "Content-Type": "text/plain" + } + }; + // get wixData query + let queryProducts = wixData.query("Stores/Products").find() + // Answer query promise + return queryProducts.then(results => { + // return list of products in response + if (results.items.length > 0) { + // create headers + const headers = ["id","title","description","link","condition","price","availability","image link","mpn","brand","google product category","shipping","gender","age group","size","color"] + // create text array to of lines + var textArray = [] + // add headers to array + textArray.push(headers.join("|")) + + results.items.forEach(f =>{ + const currentLine = createItemsDelimited(f).join("|") + textArray.push(currentLine) + }) + + response.body = textArray.join("\n") + + return ok(response) + } + // nothing found - return not found 404 error + return notFound(response) + }, error => { + // error trying to execute query - return 400 error + response.body = { + "error": error + } + return badRequest(response) + }) +} + +function createItemsDelimited(item) { + let obj = [ + item._id, //M "id": + item.name, //M "title": + item.description, //M "description": + "https://www.mochee.co.uk".concat(item.productPageUrl), //M "link": + "new", //M "condition": + `${item.price} ${item.currency}`, // "price": + getStockString(item.inStock), //M "availability": + "https://static.wixstatic.com/media".concat(item.mediaItems[0].id), //M "imageLink": + item._id, //M "mpn": + "Mochee Kent", //M "brand": + "Clothing & Accessories > Clothing > Outerwear > Coats & Jackets", //M "gpc": + "GB::Express DHL UK:9.99 GBP", //"shipping": + "male", //M "gender": + "adult", //M "ageGroup": + getSizesFromProductInfoAsString(item.productOptions), //M "sizes" + "Black" + ] + return obj +} + +function getObjectLis (parameter) { + +} + +function getSizesFromProductInfoAsString(productOptions){ + try { + let choiceList = productOptions.Size.choices; + choiceList.pop(); + let size = choiceList.map(f => f.value.split(' (')[0]) + console.log(size) + return size.join(",") + } catch (err) { + console.log(err) + return "" + } + +} + +function getSizesFromProductInfo(productOptions){ + try { + let choiceList = productOptions.Size.choices; + choiceList.pop(); + let size = choiceList.map(f => f.value.split(' (')[0]) + console.log(size) + return size + } catch (err) { + console.log(err) + return "" + } + +} + +function getStockString(bool){ + if (bool === true) { + return "in_stock" + }else{ + return "out_of_stock" + } +}