feat: enhance PowerClamp service with energy consumption procedures and enums

This commit is contained in:
faris Aljohari
2025-04-24 03:14:03 +03:00
parent f3fd6646a1
commit 881618a4ee
9 changed files with 87 additions and 126 deletions

View File

@ -19,6 +19,8 @@ import {
} from 'firebase/database';
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
import { ProductType } from '@app/common/constants/product-type.enum';
import { PowerClampService } from '@app/common/helper/services/power.clamp.service';
import { PowerClampEnergyEnum } from '@app/common/constants/power.clamp.enargy.enum';
@Injectable()
export class DeviceStatusFirebaseService {
private tuya: TuyaContext;
@ -26,6 +28,7 @@ export class DeviceStatusFirebaseService {
constructor(
private readonly configService: ConfigService,
private readonly deviceRepository: DeviceRepository,
private readonly powerClampService: PowerClampService,
private deviceStatusLogRepository: DeviceStatusLogRepository,
) {
const accessKey = this.configService.get<string>('auth-config.ACCESS_KEY');
@ -75,29 +78,12 @@ export class DeviceStatusFirebaseService {
const device = await this.getDeviceByDeviceTuyaUuid(
addDeviceStatusDto.deviceTuyaUuid,
);
if (device.productDevice.prodType === ProductType.PC) {
const energyStatus = addDeviceStatusDto.status.find(
(status) =>
status.code === 'EnergyConsumed' ||
status.code === 'EnergyConsumedA' ||
status.code === 'EnergyConsumedB' ||
status.code === 'EnergyConsumedC',
);
if (energyStatus) {
console.log(
device.productDevice.prodType,
device.uuid,
addDeviceStatusDto.log,
new Date().toLocaleDateString('en-CA'), // Format as YYYY-MM-DD
);
}
}
if (device?.uuid) {
return await this.createDeviceStatusFirebase({
deviceUuid: device.uuid,
...addDeviceStatusDto,
productType: device.productDevice.prodType,
});
}
// Return null if device not found or no UUID
@ -235,6 +221,25 @@ export class DeviceStatusFirebaseService {
});
await this.deviceStatusLogRepository.save(newLogs);
if (addDeviceStatusDto.productType === ProductType.PC) {
const energyCodes = new Set([
PowerClampEnergyEnum.ENERGY_CONSUMED,
PowerClampEnergyEnum.ENERGY_CONSUMED_A,
PowerClampEnergyEnum.ENERGY_CONSUMED_B,
PowerClampEnergyEnum.ENERGY_CONSUMED_C,
]);
const energyStatus = addDeviceStatusDto?.log?.properties?.find((status) =>
energyCodes.has(status.code),
);
if (energyStatus) {
await this.powerClampService.updateEnergyConsumedHistoricalData(
addDeviceStatusDto.deviceUuid,
);
}
}
// Return the updated data
const snapshot: DataSnapshot = await get(dataRef);
return snapshot.val();