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;