2024-02-02 17:17:58 -05:00
const apiKey = '8ALsk8jDOlynEwn8ScMBSnG87' ;
2024-02-14 17:12:33 -05:00
function main ( ) {
2024-02-02 17:17:58 -05:00
var folder = DriveApp . getFolderById ( "1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j" ) ;
var files = folder . getFiles ( ) ;
while ( files . hasNext ( ) ) {
var file = files . next ( ) ;
var getDate = new Date ( ) ;
2024-07-15 18:40:06 -04:00
var date = Utilities . formatDate ( getDate , 'America/New_York' , 'MM/dd/yyyy hh' ) ;
2024-02-02 17:17:58 -05:00
var fileDate = file . getDateCreated ( ) ;
2024-07-15 18:40:06 -04:00
var fileDateFormatted = Utilities . formatDate ( fileDate , 'America/New_York' , 'MM/dd/yyyy hh' ) ;
2024-02-02 17:17:58 -05:00
if ( date == fileDateFormatted ) {
2024-07-10 16:52:16 -04:00
Logger . log ( "Updated: " + file )
2024-02-02 17:17:58 -05:00
var updated _file = file . getBlob ( )
var updated _blob = updated _file . getDataAsString ( ) ;
var updated _data = Utilities . parseCsv ( updated _blob , ',' ) ;
2024-02-07 17:22:53 -05:00
var updated _data = updated _data . sort ( ) ;
2024-02-02 17:17:58 -05:00
} else if ( date != fileDateFormatted ) {
2024-07-10 16:52:16 -04:00
Logger . log ( "Outdated: " + file )
2024-02-02 17:17:58 -05:00
var outdated _file = file . getBlob ( )
var outdated _blob = outdated _file . getDataAsString ( ) ;
var outdated _data = Utilities . parseCsv ( outdated _blob , ',' ) ;
2024-02-07 17:22:53 -05:00
var outdated _data = outdated _data . sort ( ) ;
2024-02-02 17:17:58 -05:00
}
}
2024-02-07 17:22:53 -05:00
austinComparseData ( outdated _data , updated _data ) ;
2024-02-09 16:50:16 -05:00
moveOldFiles ( ) ;
2024-02-02 17:17:58 -05:00
}
function moveOldFiles ( ) {
2024-02-16 21:48:04 -05:00
Logger . log ( "Moving files." )
var folder = DriveApp . getFolderById ( "1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j" )
2024-02-02 17:17:58 -05:00
var files = folder . getFiles ( )
while ( files . hasNext ( ) ) {
var file = files . next ( ) ;
var getDate = new Date ( ) ;
2024-07-15 18:40:06 -04:00
var date = Utilities . formatDate ( getDate , 'America/New_York' , 'MM/dd/yyyy hh' ) ;
2024-02-02 17:17:58 -05:00
var fileDate = file . getDateCreated ( ) ;
2024-02-16 21:48:04 -05:00
Logger . log ( "FILE: " + file + ", DATE UPLOADED: " + fileDate )
2024-07-15 18:40:06 -04:00
var fileDateFormatted = Utilities . formatDate ( fileDate , 'America/New_York' , 'MM/dd/yyyy hh' ) ;
2024-02-02 17:17:58 -05:00
if ( date != fileDateFormatted ) {
2024-02-16 21:48:04 -05:00
const destination = DriveApp . getFolderById ( '1cIPZCgoj8XdjMIfL75QfomJAxsy2smGT' ) ;
2024-02-02 17:17:58 -05:00
file . moveTo ( destination ) ;
}
}
}
function austinComparseData ( outdated _data , updated _data ) {
let domains _to _update = [ ] ;
let updatedFlag = 1 ;
let outdatedFlag = 1 ;
2024-07-08 20:01:29 -04:00
2024-02-02 17:17:58 -05:00
while ( updatedFlag < updated _data . length && outdatedFlag < outdated _data . length ) {
if ( updated _data [ updatedFlag ] [ 0 ] == outdated _data [ outdatedFlag ] [ 0 ] ) {
let allUpdatedGroups = [ ] ;
let allOutdatedGroups = [ ] ;
for ( let i = 1 ; i < updated _data [ updatedFlag ] . length ; i ++ ) {
if ( updated _data [ updatedFlag ] [ i ] ) {
allUpdatedGroups . push ( updated _data [ updatedFlag ] [ i ] . trim ( ) ) ;
}
}
for ( let j = 1 ; j < outdated _data [ outdatedFlag ] . length ; j ++ ) {
if ( outdated _data [ outdatedFlag ] [ j ] ) {
allOutdatedGroups . push ( outdated _data [ outdatedFlag ] [ j ] . trim ( ) ) ;
}
}
2024-02-07 17:22:53 -05:00
2024-02-02 17:17:58 -05:00
if ( allUpdatedGroups . length !== allOutdatedGroups . length ) {
domains _to _update . push ( updated _data [ updatedFlag ] ) ;
} else {
for ( let k = 0 ; k < allUpdatedGroups . length ; k ++ ) {
if ( allOutdatedGroups . indexOf ( allUpdatedGroups [ k ] ) == - 1 ) {
domains _to _update . push ( updated _data [ updatedFlag ] ) ;
}
}
}
2024-07-08 20:01:29 -04:00
2024-02-02 17:17:58 -05:00
updatedFlag ++ ;
outdatedFlag ++ ;
} else {
if ( updated _data [ updatedFlag ] [ 0 ] > outdated _data [ outdatedFlag ] [ 0 ] ) {
outdatedFlag ++ ;
2024-07-08 20:01:29 -04:00
}
2024-02-02 17:17:58 -05:00
else if ( updated _data [ updatedFlag ] [ 0 ] < outdated _data [ outdatedFlag ] [ 0 ] ) {
domains _to _update . push ( updated _data [ updatedFlag ] ) ;
updatedFlag ++ ;
}
}
2024-07-08 20:01:29 -04:00
2024-02-02 17:17:58 -05:00
if ( updatedFlag > updated _data . length - 1 || outdatedFlag > outdated _data . length - 1 ) {
break ;
}
}
updatedDomainsOnly ( domains _to _update ) ;
}
function updatedDomainsOnly ( domains _to _update ) {
2024-07-08 20:01:29 -04:00
var errorList = [ ] ;
var corrList = [ ] ;
2024-02-02 17:17:58 -05:00
for ( var x = 0 ; x < domains _to _update . length ; x ++ ) {
var array = domains _to _update [ x ] ;
2024-07-19 16:29:00 -04:00
Logger . log ( array )
2024-07-08 20:01:29 -04:00
var currDomain = domains _to _update [ x ] [ 0 ]
var errorObj = new Object ( ) ;
var noErrorObj = new Object ( ) ;
Logger . log ( "Current Domain: " + currDomain ) ;
var errorGroups = [ ]
var correctGroups = [ ]
2024-02-02 17:17:58 -05:00
for ( var i = 1 ; i < array . length ; i ++ ) {
var item = array [ i ]
if ( item != "" ) {
var api _url = 'https://api.northpass.com/v2/groups/?filter[name][eq]=' + encodeURIComponent ( item ) ;
const settings = {
async : true ,
crossDomain : true ,
method : 'GET' ,
headers : {
accept : 'application/json' ,
'X-Api-Key' : apiKey
}
} ;
const sendMsg = UrlFetchApp . fetch ( api _url , settings ) ;
var uuidResponse = sendMsg . getContentText ( ) ;
var parseData = JSON . parse ( uuidResponse ) ;
2024-07-19 16:29:00 -04:00
var groupName = array . indexOf ( item ) ;
2024-07-08 20:01:29 -04:00
if ( parseData [ 'data' ] . length >= 1 ) {
var groupID = parseData [ 'data' ] [ 0 ] [ 'id' ] ;
if ( groupName != - 1 ) {
array [ groupName ] = groupID ;
2024-07-19 16:29:00 -04:00
}
2024-07-08 20:01:29 -04:00
correctGroups . push ( item )
} else {
errorGroups . push ( item ) ;
2024-07-19 16:29:00 -04:00
array [ groupName ] = "" ;
2024-02-02 17:17:58 -05:00
}
}
}
2024-07-08 20:01:29 -04:00
errorObj [ currDomain ] = errorGroups ;
noErrorObj [ currDomain ] = correctGroups ;
corrList . push ( noErrorObj )
errorList . push ( errorObj )
2024-02-02 17:17:58 -05:00
const dom = array . shift ( ) ;
const groups = array ;
2024-02-14 17:12:33 -05:00
Logger . log ( "{domain_to_update : {domain :" + dom + ", group_ids : " + groups + " }}" )
sendWebhook ( { domain _to _update : { domain : dom , group _ids : groups } } )
2024-02-16 21:48:04 -05:00
replaceOnSheet ( dom , groups ) ;
2024-02-02 17:17:58 -05:00
}
2024-07-19 16:29:00 -04:00
// MailApp.sendEmail("nrasmussen@gainsight.com",
// "Anthology has submitted a CSV",
// "Here are the domains that will be updated: "+JSON.stringify(noErrorObj)+"\n\n"+"Group Errors (they likely don't exist): "+JSON.stringify(errorList));
2024-07-10 16:52:16 -04:00
MailApp . sendEmail ( "amitd@anthology.com" ,
2024-07-08 20:01:29 -04:00
"Anthology has submitted a CSV" ,
"Here are the domains that will be updated: " + JSON . stringify ( noErrorObj ) + "\n\n" + "Group Errors (they likely don't exist): " + JSON . stringify ( errorList ) ) ;
2024-02-02 17:17:58 -05:00
}
2024-02-16 21:48:04 -05:00
function replaceOnSheet ( dom , groups ) {
2024-02-06 17:24:54 -05:00
var ss = SpreadsheetApp . openByUrl ( 'https://docs.google.com/spreadsheets/d/1Kck1UUOkVIU4kbBC8b_bl77fNaCTSFStiv0I5Gg-kIc/' ) ;
var sheet = ss . getActiveSheet ( )
var dataRow = Math . max ( sheet . getLastRow ( ) , 1 ) ;
2024-02-16 21:48:04 -05:00
// let domain = tmpArray.shift();
// let groupIds = tmpArray;
2024-02-06 17:24:54 -05:00
2024-02-16 21:48:04 -05:00
let boo = sheet . createTextFinder ( dom ) . findNext ( )
2024-02-07 17:22:53 -05:00
if ( boo != null ) {
2024-07-08 20:01:29 -04:00
//Logger.log("Replace on Sheet Domain: "+dom)
//Logger.log("New groups: "+groups)
2024-02-08 15:39:17 -05:00
group2 = [ ]
2024-02-07 17:22:53 -05:00
currCell = boo . getRowIndex ( ) ;
2024-02-16 21:48:04 -05:00
groups . forEach ( item => { if ( item . length > 0 ) { group2 . push ( item ) } } ) ;
2024-02-08 15:39:17 -05:00
group2 = [ group2 ] ;
2024-02-14 17:12:33 -05:00
//Logger.log(group2);
2024-02-16 21:48:04 -05:00
sheet . getRange ( currCell , 1 ) . setValue ( dom ) ;
2024-02-08 15:39:17 -05:00
sheet . getRange ( currCell , 2 , 1 , group2 [ 0 ] . length ) . setValues ( group2 )
2024-02-07 17:22:53 -05:00
} else {
2024-07-08 20:01:29 -04:00
//Logger.log("Add to Sheet: "+dom)
//Logger.log("else groups: "+groups)
2024-02-16 21:48:04 -05:00
group2 = [ ]
//groups.forEach(item => { if (item.includes("")){ } else { group2.push(item) }});
groups . forEach ( item => { if ( item . length > 0 ) { group2 . push ( item ) } } ) ;
2024-07-08 20:01:29 -04:00
//Logger.log(group2);
2024-02-16 21:48:04 -05:00
group2 = [ group2 ] ;
sheet . getRange ( dataRow + 1 , 1 ) . setValue ( dom ) ;
2024-02-08 15:39:17 -05:00
sheet . getRange ( dataRow + 1 , 2 , 1 , group2 [ 0 ] . length ) . setValues ( group2 )
2024-02-07 17:22:53 -05:00
}
2024-02-06 17:24:54 -05:00
}
2024-02-02 17:17:58 -05:00
function sendWebhook ( domain _to _update ) {
2024-02-14 17:12:33 -05:00
//Logger.log("Webhook function Object: "+JSON.stringify(domain_to_update))
2024-02-02 17:17:58 -05:00
var payload = domain _to _update
var options = {
'method' : 'post' ,
'payload' : JSON . stringify ( payload )
} ;
UrlFetchApp . fetch ( 'https://webhooks.workato.com/webhooks/rest/604b4fc0-fcd9-4f3b-b715-b42d7f740ba6/domains-updated' , options ) ;
}