mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-10 15:17:41 +00:00
added timeseries
This commit is contained in:
@ -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'))),
|
||||
|
@ -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 {}
|
||||
|
@ -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<string>('auth-config.ACCESS_KEY');
|
||||
const secretKey = this.configService.get<string>('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);
|
||||
|
||||
|
@ -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
|
||||
}
|
@ -0,0 +1 @@
|
||||
export * from './device-status-log.entity';
|
@ -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<DeviceStatusLogEntity> {
|
||||
constructor(private dataSource: DataSource) {
|
||||
super(DeviceStatusLogEntity, dataSource.createEntityManager());
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
export * from './device-status.repository';
|
@ -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],
|
||||
})
|
||||
|
@ -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],
|
||||
})
|
||||
|
Reference in New Issue
Block a user