Facebook
From Funky Horse, 3 Years ago, written in JavaScript.
Embed
Download Paste or View Raw
Hits: 78
  1. require('dotenv').config();
  2. const axios = require('axios');
  3. const pg = require('pg');
  4. const format = require('pg-format');
  5. const { STOREHUB_API_URL, STOREHUB_USERNAME, STOREHUB_PASSWORD, STOREHUB_URL_PRODUCT, DB_HOSTNAME, DB_NAME, DB_PORT, DB_USERNAME, DB_PASSWORD } = process.env;
  6.  
  7. const pgConfig = {
  8.     host: DB_HOSTNAME,
  9.     database: DB_NAME,
  10.     port: DB_PORT,
  11.     user: DB_USERNAME,
  12.     password: DB_PASSWORD
  13. }
  14.  
  15. function encodeBase64(username, password){
  16.     const buffer = Buffer.from(STOREHUB_USERNAME + ':' + STOREHUB_PASSWORD);
  17.     const base64data = buffer.toString('base64');
  18.     return base64data;
  19. }
  20.  
  21.  
  22.  
  23. async function apiGetProducts(api_url,path,username, password){
  24.  
  25.     let userData = encodeBase64(username, password);
  26.  
  27.     const res = await axios.get(api_url + path, {
  28.         headers : {
  29.             'Content-Type': 'application/json',
  30.             'Authorization': `Basic ${userData}`,
  31.         }
  32.     });
  33.  
  34.     return res;
  35. }
  36.  
  37. async function run(query1) {
  38.     let client;
  39.  
  40.     try {
  41.       client = new pg.Client(pgConfig);
  42.       await client.connect();
  43.       let {rows} = await client.query(query1);
  44.       return rows;
  45.     } catch (e) {
  46.       console.error(e.error);
  47.     } finally {
  48.       client.end();
  49.     }
  50. }
  51.  
  52. const main = async (req, res) => {
  53.  
  54.     try {
  55.         const result = await apiGetProducts(STOREHUB_API_URL, STOREHUB_URL_PRODUCT, STOREHUB_USERNAME, STOREHUB_PASSWORD);
  56.  
  57.         if(result.status !== undefined){
  58.  
  59.             var dataParams = [];
  60.    
  61.             for(let [index,data] of result.data.entries())
  62.             {
  63.                 var id = data.id;
  64.                 var name = data.name;
  65.                 var category = (data.category !== undefined) ? data.category : null ;
  66.                 var sku = data.sku;
  67.                 var priceType = String(data.priceType);
  68.                 var unitPrice = Number(data.unitPrice);
  69.                 var cost = (data.cost !== undefined) ? Number(data.cost) : null ;
  70.                 var trackStockLevel = String(data.trackStockLevel);
  71.                 var isParentProduct = String(data.isParentProduct);
  72.                
  73.    
  74.                 var params = [id, name, category, sku, priceType, unitPrice, cost, trackStockLevel, isParentProduct, -99]
  75.                 dataParams.push(params);    
  76.             }
  77.             var queryProduct = format('INSERT INTO products(id, name, category, sku, priceType, unitPrice, cost, trackStockLevel, isParentProduct, modifiedBy) VALUES %L returning id', dataParams);
  78.             var listProductId = run(queryProduct);
  79.    
  80.             const status = await Promise.all(listProductId.map(async email => await sendEmail(email)));
  81.    
  82.         }
  83.     } catch (error) {
  84.         console.log(error);
  85.     }
  86.  
  87.     const result = await apiGetProducts(STOREHUB_API_URL, STOREHUB_URL_PRODUCT, STOREHUB_USERNAME, STOREHUB_PASSWORD);
  88.  
  89.    
  90.  
  91.     res.status(200).send("OK").end();
  92. };
  93.  
  94. exports.main = main;
  95.