import { clearCacheByTableName } from '../helpers/functions.cache.js' import { acquireConnection } from './pool.js' type RecordTable = | 'BurialSiteComments' | 'BurialSites' | 'BurialSiteStatuses' | 'BurialSiteTypeFields' | 'BurialSiteTypes' | 'Cemeteries' | 'ContractComments' | 'Contracts' | 'ContractTypeFields' | 'ContractTypes' | 'FeeCategories' | 'Fees' | 'FuneralHomes' | 'WorkOrderComments' | 'WorkOrderMilestones' | 'WorkOrderMilestoneTypes' | 'WorkOrders' | 'WorkOrderTypes' const recordIdColumns = new Map([ ['BurialSiteComments', 'burialSiteCommentId'], ['BurialSites', 'burialSiteId'], ['BurialSiteStatuses', 'burialSiteStatusId'], ['BurialSiteTypeFields', 'burialSiteTypeFieldId'], ['BurialSiteTypes', 'burialSiteTypeId'], ['Cemeteries', 'cemeteryId'], ['ContractComments', 'contractCommentId'], ['Contracts', 'contractId'], ['ContractTypeFields', 'contractTypeFieldId'], ['ContractTypes', 'contractTypeId'], ['FeeCategories', 'feeCategoryId'], ['Fees', 'feeId'], ['FuneralHomes', 'funeralHomeId'], ['WorkOrderComments', 'workOrderCommentId'], ['WorkOrderMilestones', 'workOrderMilestoneId'], ['WorkOrderMilestoneTypes', 'workOrderMilestoneTypeId'], ['WorkOrders', 'workOrderId'], ['WorkOrderTypes', 'workOrderTypeId'] ]) const relatedTables = new Map([ ['BurialSites', ['BurialSiteFields', 'BurialSiteComments']], ['BurialSiteTypes', ['BurialSiteTypeFields']], ['Cemeteries', ['BurialSites']], ['Contracts', ['ContractFields', 'ContractComments']], ['ContractTypes', ['ContractTypePrints', 'ContractTypeFields']], [ 'WorkOrders', [ 'WorkOrderMilestones', 'WorkOrderLots', 'WorkOrderContracts', 'WorkOrderComments' ] ] ]) export async function deleteRecord( recordTable: RecordTable, recordId: number | string, user: User ): Promise { const database = await acquireConnection() const rightNowMillis = Date.now() const result = database .prepare( `update ${recordTable} set recordDelete_userName = ?, recordDelete_timeMillis = ? where ${recordIdColumns.get(recordTable)!} = ? and recordDelete_timeMillis is null` ) .run(user.userName, rightNowMillis, recordId) for (const relatedTable of relatedTables.get(recordTable) ?? []) { database .prepare( `update ${relatedTable} set recordDelete_userName = ?, recordDelete_timeMillis = ? where ${recordIdColumns.get(recordTable)!} = ? and recordDelete_timeMillis is null` ) .run(user.userName, rightNowMillis, recordId) } database.release() clearCacheByTableName(recordTable) return result.changes > 0 }