99 lines
2.7 KiB
TypeScript
99 lines
2.7 KiB
TypeScript
import sqlite from 'better-sqlite3'
|
|
|
|
import { sunriseDB } from '../helpers/database.helpers.js'
|
|
import { clearCacheByTableName } from '../helpers/functions.cache.js'
|
|
|
|
type RecordTable =
|
|
| 'BurialSiteComments'
|
|
| 'BurialSiteStatuses'
|
|
| 'BurialSiteTypeFields'
|
|
| 'BurialSiteTypes'
|
|
| 'CommittalTypes'
|
|
| 'ContractComments'
|
|
| 'Contracts'
|
|
| 'ContractTypeFields'
|
|
| 'ContractTypes'
|
|
| 'FeeCategories'
|
|
| 'Fees'
|
|
| 'FuneralHomes'
|
|
| 'IntermentContainerTypes'
|
|
| 'WorkOrderComments'
|
|
| 'WorkOrderMilestones'
|
|
| 'WorkOrderMilestoneTypes'
|
|
| 'WorkOrders'
|
|
| 'WorkOrderTypes'
|
|
|
|
const recordIdColumns = new Map<RecordTable, string>([
|
|
['BurialSiteComments', 'burialSiteCommentId'],
|
|
['BurialSiteStatuses', 'burialSiteStatusId'],
|
|
['BurialSiteTypeFields', 'burialSiteTypeFieldId'],
|
|
['BurialSiteTypes', 'burialSiteTypeId'],
|
|
['CommittalTypes', 'committalTypeId'],
|
|
['ContractComments', 'contractCommentId'],
|
|
['Contracts', 'contractId'],
|
|
['ContractTypeFields', 'contractTypeFieldId'],
|
|
['ContractTypes', 'contractTypeId'],
|
|
['FeeCategories', 'feeCategoryId'],
|
|
['Fees', 'feeId'],
|
|
['FuneralHomes', 'funeralHomeId'],
|
|
['IntermentContainerTypes', 'intermentContainerTypeId'],
|
|
['WorkOrderComments', 'workOrderCommentId'],
|
|
['WorkOrderMilestones', 'workOrderMilestoneId'],
|
|
['WorkOrderMilestoneTypes', 'workOrderMilestoneTypeId'],
|
|
['WorkOrders', 'workOrderId'],
|
|
['WorkOrderTypes', 'workOrderTypeId']
|
|
])
|
|
|
|
const relatedTables = new Map<RecordTable, string[]>([
|
|
['BurialSiteTypes', ['BurialSiteTypeFields']],
|
|
['Contracts', ['ContractFields', 'ContractComments']],
|
|
['ContractTypes', ['ContractTypePrints', 'ContractTypeFields']],
|
|
[
|
|
'WorkOrders',
|
|
[
|
|
'WorkOrderMilestones',
|
|
'WorkOrderBurialSites',
|
|
'WorkOrderContracts',
|
|
'WorkOrderComments'
|
|
]
|
|
]
|
|
])
|
|
|
|
export function deleteRecord(
|
|
recordTable: RecordTable,
|
|
recordId: number | string,
|
|
user: User
|
|
): boolean {
|
|
const database = sqlite(sunriseDB)
|
|
|
|
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.close()
|
|
|
|
clearCacheByTableName(recordTable)
|
|
|
|
return result.changes > 0
|
|
}
|