modules/autocomplete/initializeAutocompleteModule.js
import path from 'node:path';
import { dateToString, dateToTimePeriodString } from '@cityssm/utils-datetime';
import camelCase from 'camelcase';
import Debug from 'debug';
import exitHook from 'exit-hook';
import express from 'express';
import schedule from 'node-schedule';
import { getConfigProperty } from '../../helpers/functions.config.js';
import { moduleName } from './helpers/moduleHelpers.js';
import runUpdateAssetNumbersTask, { taskName as updateAssetNumbersTaskName } from './tasks/updateAssetNumbersTask.js';
import runUpdateItemNumbersTask, { taskName as updateItemNumbersTaskName } from './tasks/updateItemNumbersTask.js';
const debug = Debug(`faster-web-helper:${camelCase(moduleName)}`);
const assetNumbersConfig = getConfigProperty('modules.autocomplete.reports.w114');
const itemNumbersConfig = getConfigProperty('modules.autocomplete.reports.w200');
export default async function initializeAutocompleteModule(options) {
debug(`Initializing "${moduleName}"...`);
/*
* Set up static server
*/
options.app.use(getConfigProperty('webServer.urlPrefix') + '/autocomplete', express.static(path.join('public', 'autocomplete')));
/*
* Run startup tasks
*/
if (getConfigProperty('modules.autocomplete.runOnStartup')) {
debug(`Running "${updateItemNumbersTaskName}" on startup...`);
if (assetNumbersConfig !== undefined) {
await runUpdateAssetNumbersTask();
}
if (itemNumbersConfig !== undefined) {
await runUpdateItemNumbersTask();
}
}
/*
* Schedule Jobs
*/
let updateAssetNumbersJob;
if (assetNumbersConfig !== undefined) {
updateAssetNumbersJob = schedule.scheduleJob(updateAssetNumbersTaskName, assetNumbersConfig.schedule, runUpdateAssetNumbersTask);
const updateAssetNumbersFirstRunDate = new Date(updateAssetNumbersJob.nextInvocation().getTime());
debug(`Scheduled to run "${updateAssetNumbersTaskName}" on ${dateToString(updateAssetNumbersFirstRunDate)} at ${dateToTimePeriodString(updateAssetNumbersFirstRunDate)}`);
}
let updateItemNumbersJob;
if (itemNumbersConfig !== undefined) {
updateItemNumbersJob = schedule.scheduleJob(updateItemNumbersTaskName, itemNumbersConfig.schedule, runUpdateItemNumbersTask);
const updateItemNumbersFirstRunDate = new Date(updateItemNumbersJob.nextInvocation().getTime());
debug(`Scheduled to run "${updateItemNumbersTaskName}" on ${dateToString(updateItemNumbersFirstRunDate)} at ${dateToTimePeriodString(updateItemNumbersFirstRunDate)}`);
}
/*
* Set up exit hook
*/
exitHook(() => {
if (updateAssetNumbersJob !== undefined) {
updateAssetNumbersJob.cancel();
}
if (updateItemNumbersJob !== undefined) {
updateItemNumbersJob.cancel();
}
});
debug(`"${moduleName}" initialized.`);
}