310 lines
13 KiB
JavaScript
310 lines
13 KiB
JavaScript
import { getConfigProperty } from '../helpers/functions.config.js';
|
|
import { acquireConnection } from './pool.js';
|
|
export default async function cleanupDatabase(user) {
|
|
const database = await acquireConnection();
|
|
const rightNowMillis = Date.now();
|
|
const recordDeleteTimeMillisMin = rightNowMillis -
|
|
getConfigProperty('settings.adminCleanup.recordDeleteAgeDays') *
|
|
86_400 *
|
|
1000;
|
|
let inactivatedRecordCount = 0;
|
|
let purgedRecordCount = 0;
|
|
/*
|
|
* Work Order Comments
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update WorkOrderComments
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and workOrderId in (
|
|
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Work Order Lot Occupancies
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update WorkOrderLotOccupancies
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and workOrderId in (
|
|
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Work Order Lots
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update WorkOrderLots
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and workOrderId in (
|
|
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from WorkOrderLots where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Work Order Milestones
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update WorkOrderMilestones
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and workOrderId in (
|
|
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from WorkOrderMilestones where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Work Orders
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from WorkOrders
|
|
where recordDelete_timeMillis <= ?
|
|
and workOrderId not in (select workOrderId from WorkOrderComments)
|
|
and workOrderId not in (select workOrderId from WorkOrderLotOccupancies)
|
|
and workOrderId not in (select workOrderId from WorkOrderLots)
|
|
and workOrderId not in (select workOrderId from WorkOrderMilestones)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Work Order Milestone Types
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from WorkOrderMilestoneTypes
|
|
where recordDelete_timeMillis <= ?
|
|
and workOrderMilestoneTypeId not in (
|
|
select workOrderMilestoneTypeId from WorkOrderMilestones)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Work Order Types
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from WorkOrderTypes
|
|
where recordDelete_timeMillis <= ?
|
|
and workOrderTypeId not in (select workOrderTypeId from WorkOrders)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Occupancy Comments
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update LotOccupancyComments
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and lotOccupancyId in (
|
|
select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotOccupancyComments where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Occupancy Fields
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update LotOccupancyFields
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotOccupancyFields where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Occupancy Occupants
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update LotOccupancyOccupants
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Occupancy Fees/Transactions
|
|
* - Maintain financials, do not delete related.
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotOccupancyFees where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Occupancies
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from LotOccupancies
|
|
where recordDelete_timeMillis <= ?
|
|
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyComments)
|
|
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyFees)
|
|
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyFields)
|
|
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyOccupants)
|
|
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyTransactions)
|
|
and lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Fees
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update Fees
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and feeCategoryId in (select feeCategoryId from FeeCategories where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare(`delete from Fees
|
|
where recordDelete_timeMillis <= ?
|
|
and feeId not in (select feeId from LotOccupancyFees)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Fee Categories
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from FeeCategories
|
|
where recordDelete_timeMillis <= ?
|
|
and feeCategoryId not in (select feeCategoryId from Fees)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Occupancy Type Fields
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update OccupancyTypeFields
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare(`delete from OccupancyTypeFields
|
|
where recordDelete_timeMillis <= ?
|
|
and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Occupancy Type Prints
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update OccupancyTypePrints
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from OccupancyTypePrints where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Occupancy Types
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from OccupancyTypes
|
|
where recordDelete_timeMillis <= ?
|
|
and occupancyTypeId not in (select occupancyTypeId from OccupancyTypeFields)
|
|
and occupancyTypeId not in (select occupancyTypeId from OccupancyTypePrints)
|
|
and occupancyTypeId not in (select occupancyTypeId from LotOccupancies)
|
|
and occupancyTypeId not in (select occupancyTypeId from Fees)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Occupant Types
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from LotOccupantTypes
|
|
where recordDelete_timeMillis <= ?
|
|
and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Comments
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update LotComments
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotComments where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Fields
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update LotFields
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare('delete from LotFields where recordDelete_timeMillis <= ?')
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lots
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update Lots
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and mapId in (select mapId from Maps where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare(`delete from Lots
|
|
where recordDelete_timeMillis <= ?
|
|
and lotId not in (select lotId from LotComments)
|
|
and lotId not in (select lotId from LotFields)
|
|
and lotId not in (select lotId from LotOccupancies)
|
|
and lotId not in (select lotId from WorkOrderLots)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Statuses
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from LotStatuses
|
|
where recordDelete_timeMillis <= ?
|
|
and lotStatusId not in (select lotStatusId from Lots)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Type Fields
|
|
*/
|
|
inactivatedRecordCount += database
|
|
.prepare(`update LotTypeFields
|
|
set recordDelete_userName = ?,
|
|
recordDelete_timeMillis = ?
|
|
where recordDelete_timeMillis is null
|
|
and lotTypeId in (select lotTypeId from LotTypes where recordDelete_timeMillis is not null)`)
|
|
.run(user.userName, rightNowMillis).changes;
|
|
purgedRecordCount += database
|
|
.prepare(`delete from LotTypeFields
|
|
where recordDelete_timeMillis <= ?
|
|
and lotTypeFieldId not in (select lotTypeFieldId from LotFields)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
/*
|
|
* Lot Types
|
|
*/
|
|
purgedRecordCount += database
|
|
.prepare(`delete from LotTypes
|
|
where recordDelete_timeMillis <= ?
|
|
and lotTypeId not in (select lotTypeId from Lots)`)
|
|
.run(recordDeleteTimeMillisMin).changes;
|
|
database.release();
|
|
return {
|
|
inactivatedRecordCount,
|
|
purgedRecordCount
|
|
};
|
|
}
|