feat: add occupancy duration data retrieval and update procedures

This commit is contained in:
faris Aljohari
2025-05-18 17:40:41 +03:00
parent dca3db0c59
commit 180d16eeb1
5 changed files with 108 additions and 15 deletions

View File

@ -257,6 +257,9 @@ export class DeviceStatusFirebaseService {
await this.occupancyService.updateOccupancySensorHistoricalData(
addDeviceStatusDto.deviceUuid,
);
await this.occupancyService.updateOccupancySensorHistoricalDurationData(
addDeviceStatusDto.deviceUuid,
);
}
}

View File

@ -11,7 +11,27 @@ export class OccupancyService {
private readonly dataSource: DataSource,
private readonly deviceRepository: DeviceRepository,
) {}
async updateOccupancySensorHistoricalDurationData(
deviceUuid: string,
): Promise<void> {
try {
const now = new Date();
const dateStr = now.toLocaleDateString('en-CA'); // YYYY-MM-DD
const device = await this.deviceRepository.findOne({
where: { uuid: deviceUuid },
relations: ['spaceDevice'],
});
await this.executeProcedure(
'fact_daily_space_occupancy_duration',
'procedure_update_daily_space_occupancy_duration',
[dateStr, device.spaceDevice?.uuid],
);
} catch (err) {
console.error('Failed to insert or update occupancy duration data:', err);
throw err;
}
}
async updateOccupancySensorHistoricalData(deviceUuid: string): Promise<void> {
try {
const now = new Date();
@ -21,10 +41,11 @@ export class OccupancyService {
relations: ['spaceDevice'],
});
await this.executeProcedure('procedure_update_fact_space_occupancy', [
dateStr,
device.spaceDevice?.uuid,
]);
await this.executeProcedure(
'fact_space_occupancy_count',
'procedure_update_fact_space_occupancy',
[dateStr, device.spaceDevice?.uuid],
);
} catch (err) {
console.error('Failed to insert or update occupancy data:', err);
throw err;
@ -32,13 +53,11 @@ export class OccupancyService {
}
private async executeProcedure(
procedureFolderName: string,
procedureFileName: string,
params: (string | number | null)[],
): Promise<void> {
const query = this.loadQuery(
'fact_space_occupancy_count',
procedureFileName,
);
const query = this.loadQuery(procedureFolderName, procedureFileName);
await this.dataSource.query(query, params);
console.log(`Procedure ${procedureFileName} executed successfully.`);
}