in src/main.ts [122:197]
async function generateFileForDay(
zuoraBearerToken: string,
salesforceSSMConfig: SalesforceSSMConfig,
identityAPIBearerToken: string,
dayIndex: number,
) {
// This function generates one file. The date of the file that is being generated is derived from the dayIndex
// dayIndex = 1 -> tomorrow
// dayIndex = 2 -> two days from now, etc...
// The file generation is a linear sequence of steps that essentially perform 3 main operations:
// 1. Retrieve subscription and holiday data from Zuora
// 2. combine the two datasets using pure functions
// 3. Write the resulting file into S3
console.log(`Generating dayIndex: ${dayIndex}`);
const now = moment();
const cursor = moment().add(dayIndex, 'days');
const today = now.format('YYYY-MM-DD');
const targetDate = cursor.format('YYYY-MM-DD');
console.log(`today: ${today}`);
console.log(`targetDate: ${targetDate}`);
const zuoraDataFiles = await cycleDataFilesFromZuora(
Stage,
zuoraBearerToken,
targetDate,
today,
);
const currentSubs: ZuoraSubscription[] =
subscriptionsDataFileToSubscriptions(zuoraDataFiles.subscriptionsFile);
const correctSubs: ZuoraSubscription[] =
retainCorrectSubscriptions(currentSubs);
const holidaySubscriptionNames: string[] = holidayNamesDataFileToNames(
zuoraDataFiles.holidayNamesFile,
);
const subsWithoutHolidayStops: ZuoraSubscription[] =
excludeHolidaySubscriptions(correctSubs, holidaySubscriptionNames);
const sentDate: string = now.format('DD/MM/YYYY');
const deliveryDate: string = cursor.format('DD/MM/YYYY');
const salesforcePhoneBook: PhoneBook =
await getPhoneBook(salesforceSSMConfig);
console.log(`salesforcePhoneBook: ${JSON.stringify(salesforcePhoneBook)}`);
// Originally this was a pure function but it is now async because of the IDAPI lookup
const fileRecords: FileRecord[] = await subscriptionsToFileRecords(
Stage,
subsWithoutHolidayStops,
sentDate,
deliveryDate,
salesforcePhoneBook,
identityAPIBearerToken,
);
const file2 = fileRecordsToCSVFile(fileRecords);
const filePathKey = `fulfilment/${cursor.format('YYYY')}/${cursor.format(
'YYYY-MM',
)}/${cursor.format('YYYY-MM-DD')}.csv`;
await commitFileToS3_v3(Stage, filePathKey, file2);
console.log(`Generated file for targetDate: ${targetDate}`);
}