206 lines
7.6 KiB
JavaScript
206 lines
7.6 KiB
JavaScript
// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
|
|
/* eslint-disable @typescript-eslint/init-declarations */
|
|
import cluster from 'node:cluster';
|
|
import Debug from 'debug';
|
|
import getBurialSiteStatusesFromDatabase from '../database/getBurialSiteStatuses.js';
|
|
import getBurialSiteTypesFromDatabase from '../database/getBurialSiteTypes.js';
|
|
import getContractTypeFieldsFromDatabase from '../database/getContractTypeFields.js';
|
|
import getContractTypesFromDatabase from '../database/getContractTypes.js';
|
|
import getWorkOrderMilestoneTypesFromDatabase from '../database/getWorkOrderMilestoneTypes.js';
|
|
import getWorkOrderTypesFromDatabase from '../database/getWorkOrderTypes.js';
|
|
import { DEBUG_NAMESPACE } from '../debug.config.js';
|
|
import { getConfigProperty } from './config.helpers.js';
|
|
const debug = Debug(`${DEBUG_NAMESPACE}:functions.cache:${process.pid}`);
|
|
/*
|
|
* Burial Site Statuses
|
|
*/
|
|
let burialSiteStatuses;
|
|
export async function getBurialSiteStatuses() {
|
|
if (burialSiteStatuses === undefined) {
|
|
burialSiteStatuses = await getBurialSiteStatusesFromDatabase();
|
|
}
|
|
return burialSiteStatuses;
|
|
}
|
|
export async function getBurialSiteStatusById(burialSiteStatusId) {
|
|
const cachedStatuses = await getBurialSiteStatuses();
|
|
return cachedStatuses.find((currentStatus) => currentStatus.burialSiteStatusId === burialSiteStatusId);
|
|
}
|
|
export async function getBurialSiteStatusByBurialSiteStatus(burialSiteStatus) {
|
|
const cachedStatuses = await getBurialSiteStatuses();
|
|
const statusLowerCase = burialSiteStatus.toLowerCase();
|
|
return cachedStatuses.find((currentStatus) => currentStatus.burialSiteStatus.toLowerCase() === statusLowerCase);
|
|
}
|
|
function clearBurialSiteStatusesCache() {
|
|
burialSiteStatuses = undefined;
|
|
}
|
|
/*
|
|
* Burial Site Types
|
|
*/
|
|
let burialSiteTypes;
|
|
export async function getBurialSiteTypes() {
|
|
if (burialSiteTypes === undefined) {
|
|
burialSiteTypes = await getBurialSiteTypesFromDatabase();
|
|
}
|
|
return burialSiteTypes;
|
|
}
|
|
export async function getBurialSiteTypeById(burialSiteTypeId) {
|
|
const cachedTypes = await getBurialSiteTypes();
|
|
return cachedTypes.find((currentType) => currentType.burialSiteTypeId === burialSiteTypeId);
|
|
}
|
|
export async function getBurialSiteTypesByBurialSiteType(burialSiteType) {
|
|
const cachedTypes = await getBurialSiteTypes();
|
|
const typeLowerCase = burialSiteType.toLowerCase();
|
|
return cachedTypes.find((currentType) => currentType.burialSiteType.toLowerCase() === typeLowerCase);
|
|
}
|
|
function clearBurialSiteTypesCache() {
|
|
burialSiteTypes = undefined;
|
|
}
|
|
/*
|
|
* Contract Types
|
|
*/
|
|
let contractTypes;
|
|
let allContractTypeFields;
|
|
export async function getContractTypes() {
|
|
if (contractTypes === undefined) {
|
|
contractTypes = await getContractTypesFromDatabase();
|
|
}
|
|
return contractTypes;
|
|
}
|
|
export async function getAllContractTypeFields() {
|
|
if (allContractTypeFields === undefined) {
|
|
allContractTypeFields = await getContractTypeFieldsFromDatabase();
|
|
}
|
|
return allContractTypeFields;
|
|
}
|
|
export async function getContractTypeById(contractTypeId) {
|
|
const cachedTypes = await getContractTypes();
|
|
return cachedTypes.find((currentType) => currentType.contractTypeId === contractTypeId);
|
|
}
|
|
export async function getContractTypeByContractType(contractTypeString) {
|
|
const cachedTypes = await getContractTypes();
|
|
const typeLowerCase = contractTypeString.toLowerCase();
|
|
return cachedTypes.find((currentType) => currentType.contractType.toLowerCase() === typeLowerCase);
|
|
}
|
|
export async function getContractTypePrintsById(contractTypeId) {
|
|
const contractType = await getContractTypeById(contractTypeId);
|
|
if (contractType?.contractTypePrints === undefined ||
|
|
contractType.contractTypePrints.length === 0) {
|
|
return [];
|
|
}
|
|
if (contractType.contractTypePrints.includes('*')) {
|
|
return getConfigProperty('settings.contracts.prints');
|
|
}
|
|
return contractType.contractTypePrints ?? [];
|
|
}
|
|
function clearContractTypesCache() {
|
|
contractTypes = undefined;
|
|
allContractTypeFields = undefined;
|
|
}
|
|
/*
|
|
* Work Order Types
|
|
*/
|
|
let workOrderTypes;
|
|
export async function getWorkOrderTypes() {
|
|
if (workOrderTypes === undefined) {
|
|
workOrderTypes = await getWorkOrderTypesFromDatabase();
|
|
}
|
|
return workOrderTypes;
|
|
}
|
|
export async function getWorkOrderTypeById(workOrderTypeId) {
|
|
const cachedWorkOrderTypes = await getWorkOrderTypes();
|
|
return cachedWorkOrderTypes.find((currentWorkOrderType) => currentWorkOrderType.workOrderTypeId === workOrderTypeId);
|
|
}
|
|
function clearWorkOrderTypesCache() {
|
|
workOrderTypes = undefined;
|
|
}
|
|
/*
|
|
* Work Order Milestone Types
|
|
*/
|
|
let workOrderMilestoneTypes;
|
|
export async function getWorkOrderMilestoneTypes() {
|
|
if (workOrderMilestoneTypes === undefined) {
|
|
workOrderMilestoneTypes = await getWorkOrderMilestoneTypesFromDatabase();
|
|
}
|
|
return workOrderMilestoneTypes;
|
|
}
|
|
export async function getWorkOrderMilestoneTypeById(workOrderMilestoneTypeId) {
|
|
const cachedWorkOrderMilestoneTypes = await getWorkOrderMilestoneTypes();
|
|
return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => currentWorkOrderMilestoneType.workOrderMilestoneTypeId ===
|
|
workOrderMilestoneTypeId);
|
|
}
|
|
export async function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString) {
|
|
const cachedWorkOrderMilestoneTypes = await getWorkOrderMilestoneTypes();
|
|
const workOrderMilestoneTypeLowerCase = workOrderMilestoneTypeString.toLowerCase();
|
|
return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => currentWorkOrderMilestoneType.workOrderMilestoneType.toLowerCase() ===
|
|
workOrderMilestoneTypeLowerCase);
|
|
}
|
|
export async function preloadCaches() {
|
|
debug('Preloading caches');
|
|
await getBurialSiteStatuses();
|
|
await getBurialSiteTypes();
|
|
await getContractTypes();
|
|
await getWorkOrderTypes();
|
|
await getWorkOrderMilestoneTypes();
|
|
}
|
|
export function clearCaches() {
|
|
clearBurialSiteStatusesCache();
|
|
clearBurialSiteTypesCache();
|
|
clearContractTypesCache();
|
|
clearWorkOrderTypesCache();
|
|
clearWorkOrderMilestoneTypesCache();
|
|
}
|
|
function clearWorkOrderMilestoneTypesCache() {
|
|
workOrderMilestoneTypes = undefined;
|
|
}
|
|
export function clearCacheByTableName(tableName, relayMessage = true) {
|
|
switch (tableName) {
|
|
case 'BurialSiteStatuses': {
|
|
clearBurialSiteStatusesCache();
|
|
break;
|
|
}
|
|
case 'BurialSiteTypes':
|
|
case 'BurialSiteTypeFields': {
|
|
clearBurialSiteTypesCache();
|
|
break;
|
|
}
|
|
case 'ContractTypes':
|
|
case 'ContractTypeFields':
|
|
case 'ContractTypePrints': {
|
|
clearContractTypesCache();
|
|
break;
|
|
}
|
|
case 'WorkOrderMilestoneTypes': {
|
|
clearWorkOrderMilestoneTypesCache();
|
|
break;
|
|
}
|
|
case 'WorkOrderTypes': {
|
|
clearWorkOrderTypesCache();
|
|
break;
|
|
}
|
|
default: {
|
|
return;
|
|
}
|
|
}
|
|
try {
|
|
if (relayMessage && cluster.isWorker) {
|
|
const workerMessage = {
|
|
messageType: 'clearCache',
|
|
tableName,
|
|
timeMillis: Date.now(),
|
|
pid: process.pid
|
|
};
|
|
debug(`Sending clear cache from worker: ${tableName}`);
|
|
if (process.send !== undefined) {
|
|
process.send(workerMessage);
|
|
}
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
process.on('message', (message) => {
|
|
if (message.messageType === 'clearCache' && message.pid !== process.pid) {
|
|
debug(`Clearing cache: ${message.tableName}`);
|
|
clearCacheByTableName(message.tableName, false);
|
|
}
|
|
});
|