require('dotenv').config(); const axios = require('axios'); const pg = require('pg'); const format = require('pg-format'); const { STOREHUB_API_URL, STOREHUB_USERNAME, STOREHUB_PASSWORD, STOREHUB_URL_PRODUCT, DB_HOSTNAME, DB_NAME, DB_PORT, DB_USERNAME, DB_PASSWORD } = process.env; const pgConfig = { host: DB_HOSTNAME, database: DB_NAME, port: DB_PORT, user: DB_USERNAME, password: DB_PASSWORD } function encodeBase64(username, password){ const buffer = Buffer.from(STOREHUB_USERNAME + ':' + STOREHUB_PASSWORD); const base64data = buffer.toString('base64'); return base64data; } async function apiGetProducts(api_url,path,username, password){ let userData = encodeBase64(username, password); const res = await axios.get(api_url + path, { headers : { 'Content-Type': 'application/json', 'Authorization': `Basic ${userData}`, } }); return res; } async function run(query1) { let client; try { client = new pg.Client(pgConfig); await client.connect(); let {rows} = await client.query(query1); return rows; } catch (e) { console.error(e.error); } finally { client.end(); } } const main = async (req, res) => { try { const result = await apiGetProducts(STOREHUB_API_URL, STOREHUB_URL_PRODUCT, STOREHUB_USERNAME, STOREHUB_PASSWORD); if(result.status !== undefined){ var dataParams = []; for(let [index,data] of result.data.entries()) { var id = data.id; var name = data.name; var category = (data.category !== undefined) ? data.category : null ; var sku = data.sku; var priceType = String(data.priceType); var unitPrice = Number(data.unitPrice); var cost = (data.cost !== undefined) ? Number(data.cost) : null ; var trackStockLevel = String(data.trackStockLevel); var isParentProduct = String(data.isParentProduct); var params = [id, name, category, sku, priceType, unitPrice, cost, trackStockLevel, isParentProduct, -99] dataParams.push(params); } var queryProduct = format('INSERT INTO products(id, name, category, sku, priceType, unitPrice, cost, trackStockLevel, isParentProduct, modifiedBy) VALUES %L returning id', dataParams); var listProductId = run(queryProduct); const status = await Promise.all(listProductId.map(async email => await sendEmail(email))); } } catch (error) { console.log(error); } const result = await apiGetProducts(STOREHUB_API_URL, STOREHUB_URL_PRODUCT, STOREHUB_USERNAME, STOREHUB_PASSWORD); res.status(200).send("OK").end(); }; exports.main = main;