From 07ac955eb030a80529617bf17076c999988d2012 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 20 Oct 2024 16:46:44 +0300 Subject: [PATCH] added timeseries --- libs/common/src/database/database.module.ts | 2 ++ .../devices-status/devices-status.module.ts | 9 +++++-- .../services/devices-status.service.ts | 11 ++++++++ .../entities/device-status-log.entity.ts | 26 +++++++++++++++++++ .../device-status-log/entities/index.ts | 1 + .../repositories/device-status.repository.ts | 10 +++++++ .../device-status-log/repositories/index.ts | 1 + src/door-lock/door.lock.module.ts | 2 ++ .../visitor-password.module.ts | 2 ++ 9 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 libs/common/src/modules/device-status-log/entities/device-status-log.entity.ts create mode 100644 libs/common/src/modules/device-status-log/entities/index.ts create mode 100644 libs/common/src/modules/device-status-log/repositories/device-status.repository.ts create mode 100644 libs/common/src/modules/device-status-log/repositories/index.ts diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index ae01e55..9de32e9 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -19,6 +19,7 @@ import { DeviceNotificationEntity } from '../modules/device/entities'; import { RegionEntity } from '../modules/region/entities'; import { TimeZoneEntity } from '../modules/timezone/entities'; import { VisitorPasswordEntity } from '../modules/visitor-password/entities'; +import { DeviceStatusLogEntity } from '../modules/device-status-log/entities'; @Module({ imports: [ @@ -52,6 +53,7 @@ import { VisitorPasswordEntity } from '../modules/visitor-password/entities'; RegionEntity, TimeZoneEntity, VisitorPasswordEntity, + DeviceStatusLogEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/firebase/devices-status/devices-status.module.ts b/libs/common/src/firebase/devices-status/devices-status.module.ts index ad13b29..54d5cfa 100644 --- a/libs/common/src/firebase/devices-status/devices-status.module.ts +++ b/libs/common/src/firebase/devices-status/devices-status.module.ts @@ -2,10 +2,15 @@ import { Module } from '@nestjs/common'; import { DeviceStatusFirebaseController } from './controllers/devices-status.controller'; import { DeviceStatusFirebaseService } from './services/devices-status.service'; import { DeviceRepository } from '@app/common/modules/device/repositories'; +import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories/device-status.repository'; @Module({ - providers: [DeviceStatusFirebaseService, DeviceRepository], + providers: [ + DeviceStatusFirebaseService, + DeviceRepository, + DeviceStatusLogRepository, + ], controllers: [DeviceStatusFirebaseController], - exports: [DeviceStatusFirebaseService], + exports: [DeviceStatusFirebaseService, DeviceStatusLogRepository], }) export class DeviceStatusFirebaseModule {} diff --git a/libs/common/src/firebase/devices-status/services/devices-status.service.ts b/libs/common/src/firebase/devices-status/services/devices-status.service.ts index f075f34..41a3b39 100644 --- a/libs/common/src/firebase/devices-status/services/devices-status.service.ts +++ b/libs/common/src/firebase/devices-status/services/devices-status.service.ts @@ -11,6 +11,7 @@ import { TuyaContext } from '@tuya/tuya-connector-nodejs'; import { ConfigService } from '@nestjs/config'; import { firebaseDataBase } from '../../firebase.config'; import { Database, DataSnapshot, get, ref, set } from 'firebase/database'; +import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories'; @Injectable() export class DeviceStatusFirebaseService { private tuya: TuyaContext; @@ -18,6 +19,7 @@ export class DeviceStatusFirebaseService { constructor( private readonly configService: ConfigService, private readonly deviceRepository: DeviceRepository, + private deviceStatusLogRepository: DeviceStatusLogRepository, ) { const accessKey = this.configService.get('auth-config.ACCESS_KEY'); const secretKey = this.configService.get('auth-config.SECRET_KEY'); @@ -175,6 +177,7 @@ export class DeviceStatusFirebaseService { ); // Update or add status codes + for (const statusItem of addDeviceStatusDto.status) { statusMap.set(statusItem.code, statusItem.value); } @@ -184,7 +187,15 @@ export class DeviceStatusFirebaseService { code, value, })); + const newLog = this.deviceStatusLogRepository.create({ + deviceUuid: addDeviceStatusDto.deviceUuid, + deviceTuyaUuid: addDeviceStatusDto.deviceTuyaUuid, + productUuid: addDeviceStatusDto.productUuid, + productType: addDeviceStatusDto.productType, + status: existingData.status, + }); + await this.deviceStatusLogRepository.save(newLog); // Save the updated data to Firebase await set(dataRef, existingData); diff --git a/libs/common/src/modules/device-status-log/entities/device-status-log.entity.ts b/libs/common/src/modules/device-status-log/entities/device-status-log.entity.ts new file mode 100644 index 0000000..d886ae3 --- /dev/null +++ b/libs/common/src/modules/device-status-log/entities/device-status-log.entity.ts @@ -0,0 +1,26 @@ +import { Entity, Column, PrimaryColumn, Index } from 'typeorm'; + +@Entity('device-status-log') +@Index('logTime_idx', ['logTime']) +export class DeviceStatusLogEntity { + @PrimaryColumn() + id: number; + + @PrimaryColumn({ type: 'timestamptz' }) + logTime: Date; + + @Column({ type: 'text' }) + deviceUuid: string; + + @Column({ type: 'text' }) + deviceTuyaUuid: string; + + @Column({ type: 'text' }) + productUuid: string; + + @Column({ type: 'text' }) + productType: string; + + @Column({ type: 'jsonb' }) + status: any; // JSON array of status codes and values +} diff --git a/libs/common/src/modules/device-status-log/entities/index.ts b/libs/common/src/modules/device-status-log/entities/index.ts new file mode 100644 index 0000000..07b1986 --- /dev/null +++ b/libs/common/src/modules/device-status-log/entities/index.ts @@ -0,0 +1 @@ +export * from './device-status-log.entity'; diff --git a/libs/common/src/modules/device-status-log/repositories/device-status.repository.ts b/libs/common/src/modules/device-status-log/repositories/device-status.repository.ts new file mode 100644 index 0000000..84f3d60 --- /dev/null +++ b/libs/common/src/modules/device-status-log/repositories/device-status.repository.ts @@ -0,0 +1,10 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { DeviceStatusLogEntity } from '../entities/device-status-log.entity'; + +@Injectable() +export class DeviceStatusLogRepository extends Repository { + constructor(private dataSource: DataSource) { + super(DeviceStatusLogEntity, dataSource.createEntityManager()); + } +} diff --git a/libs/common/src/modules/device-status-log/repositories/index.ts b/libs/common/src/modules/device-status-log/repositories/index.ts new file mode 100644 index 0000000..02628b5 --- /dev/null +++ b/libs/common/src/modules/device-status-log/repositories/index.ts @@ -0,0 +1 @@ +export * from './device-status.repository'; diff --git a/src/door-lock/door.lock.module.ts b/src/door-lock/door.lock.module.ts index b72fad9..d5f070e 100644 --- a/src/door-lock/door.lock.module.ts +++ b/src/door-lock/door.lock.module.ts @@ -10,6 +10,7 @@ import { DeviceService } from 'src/device/services'; import { ProductRepository } from '@app/common/modules/product/repositories'; import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service'; import { SpaceRepository } from '@app/common/modules/space/repositories'; +import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories'; @Module({ imports: [ConfigModule, DeviceRepositoryModule], controllers: [DoorLockController], @@ -22,6 +23,7 @@ import { SpaceRepository } from '@app/common/modules/space/repositories'; ProductRepository, DeviceStatusFirebaseService, SpaceRepository, + DeviceStatusLogRepository, ], exports: [DoorLockService], }) diff --git a/src/vistor-password/visitor-password.module.ts b/src/vistor-password/visitor-password.module.ts index 19e61ea..990e1e7 100644 --- a/src/vistor-password/visitor-password.module.ts +++ b/src/vistor-password/visitor-password.module.ts @@ -12,6 +12,7 @@ import { ProductRepository } from '@app/common/modules/product/repositories'; import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service'; import { SpaceRepository } from '@app/common/modules/space/repositories'; import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/repositories'; +import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories'; @Module({ imports: [ConfigModule, DeviceRepositoryModule, DoorLockModule], controllers: [VisitorPasswordController], @@ -25,6 +26,7 @@ import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/ SpaceRepository, DeviceRepository, VisitorPasswordRepository, + DeviceStatusLogRepository, ], exports: [VisitorPasswordService], })