const axios = require("axios") const fs = require("fs"); const { parse } = require("csv-parse"); //let xApiKey = "XxDBlgH3CNSiD6yDgqZgpjjxB" // <<< This is for Ausitn's School let xApiKey = 'HdZFoXGCFpt8NnTOzIQY0kVDj' // <<< This is for sandata's school let allNPUsers = []; let allUsers = []; let userExistsObj = {}; const getAllNPUsers = async (num) => { if(num === 1){ console.log('\x1b[33m%s\x1b[0m', `RETRIEVING ALL NP USERS`); } console.log(`RETRIEVING PAGE ${num} OF USERS`) let page = num; await axios({ method: 'get', url: 'https://api.northpass.com/v2/people/?page=' + page + '&limit=100', headers: { 'accept': '*/*', 'x-api-key': xApiKey, 'content-type': 'application/json' } }) .then(async (res) => { if (res.data.links.next != null) { page++; for (let i = 0; i < res.data.data.length; i++) { allNPUsers.push(res.data.data[i]); } await getAllNPUsers(page); } else { for (let i = 0; i < res.data.data.length; i++) { allNPUsers.push(res.data.data[i]); } } }) .catch(err => { console.log(err); }) } const userExists = (userEmail) => { userEmail = userEmail.split('').map((letter) => letter.toLowerCase()).join('').trim(); let userExistsFlag = false; for(let i = 0; i < allNPUsers.length; i++){ if(allNPUsers[i].attributes.email == userEmail){ userExistsFlag = true; userExistsObj = { exists: true, data: allNPUsers[i] } return true; } else if(userExistsFlag === false && i === allNPUsers.length-1){ userExistsObj = { exists: false, data: [] } return false; } } } fs.createReadStream("./sandataNevadaUsers.csv") .pipe(parse({ delimiter: ','})) .on("data", function (row) { if(row[0] !== 'Email'){ let user = { email: row[0] }; if(row[1].length > 0){ user['agency_name'] = row[1]; } if(row[2].length > 0){ user['medicaid_id'] = row[2]; } if(row[3].length > 0){ user['provider_id'] = row[3]; } // user['provider_id'] = ''; if(row[4]){ if(row[4].length > 0){ user['agency_id'] = row[4]; } } allUsers.push(user); } }) .on("error", function (error) { console.log(error.message); }) .on("end", async function () { console.log("FINISHED COLLECTING ALL USERS"); // console.log(allUsers); console.log(allUsers.length); await executeFunctionChain(); }) let executeFunctionChain = async () => { await getAllNPUsers(1) .then(async () => { console.log('\x1b[36m%s\x1b[0m', `COMPLETED IMPORTING ALL NP USERS`); console.log(allNPUsers.length); let tracker = 0; for(let i = 0; i < allUsers.length; i++){ userExistsObj = {}; let someUser = allUsers[i]; // console.log(someUser.email); if(userExists(someUser.email)){ // console.log('INDEX >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' + i) let userID = userExistsObj.data.id; let propsObj = {}; if(someUser.agency_name){ propsObj['agency_name'] = someUser.agency_name; } if(someUser.medicaid_id){ propsObj['medicaid_id'] = someUser.medicaid_id; } if(someUser.provider_id){ propsObj['provider_id'] = someUser.provider_id; } // else { // propsObj['provider_id'] = null; // } if(someUser.agency_id){ propsObj['agency_id'] = someUser.agency_id; } propsObj['successfully_completed_secondary_registration'] = true; tracker++; await requestHandler(userID, propsObj) .then((res) => { console.log('\x1b[31m%s\x1b[0m', `SUCCESSFULLY SET PROPS FOR USER ${someUser.email} AT INDEX ${i}`); // console.log(`COMPLETED USER ${i + 1}`); // if(i == allUsers.length-1){ // console.log(`${tracker} users updated`); // } return; }) .catch((err) => { console.log(err); }) } } }) .catch((err) => {console.log(err)}) } let requestHandler = async (userID, propsObj) => { // console.log(userID); console.log(propsObj); await axios({ method: "POST", url: "https://api.northpass.com/v2/properties/people/bulk", data: { data: [{ id: userID, type:'person_properties', attributes: { 'properties': propsObj }, }], }, headers: { 'accept': 'application/json', 'x-api-key': xApiKey, 'content-type': 'application/json' } }) // .catch((err) => { // console.log(err); // }) }