async function generateFileForDay()

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}`);
}