mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-11-26 19:54:54 +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 { RegionEntity } from '../modules/region/entities';
|
||||||
import { TimeZoneEntity } from '../modules/timezone/entities';
|
import { TimeZoneEntity } from '../modules/timezone/entities';
|
||||||
import { VisitorPasswordEntity } from '../modules/visitor-password/entities';
|
import { VisitorPasswordEntity } from '../modules/visitor-password/entities';
|
||||||
|
import { DeviceStatusLogEntity } from '../modules/device-status-log/entities';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@ -52,6 +53,7 @@ import { VisitorPasswordEntity } from '../modules/visitor-password/entities';
|
|||||||
RegionEntity,
|
RegionEntity,
|
||||||
TimeZoneEntity,
|
TimeZoneEntity,
|
||||||
VisitorPasswordEntity,
|
VisitorPasswordEntity,
|
||||||
|
DeviceStatusLogEntity,
|
||||||
],
|
],
|
||||||
namingStrategy: new SnakeNamingStrategy(),
|
namingStrategy: new SnakeNamingStrategy(),
|
||||||
synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))),
|
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 { DeviceStatusFirebaseController } from './controllers/devices-status.controller';
|
||||||
import { DeviceStatusFirebaseService } from './services/devices-status.service';
|
import { DeviceStatusFirebaseService } from './services/devices-status.service';
|
||||||
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
import { DeviceRepository } from '@app/common/modules/device/repositories';
|
||||||
|
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories/device-status.repository';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
providers: [DeviceStatusFirebaseService, DeviceRepository],
|
providers: [
|
||||||
|
DeviceStatusFirebaseService,
|
||||||
|
DeviceRepository,
|
||||||
|
DeviceStatusLogRepository,
|
||||||
|
],
|
||||||
controllers: [DeviceStatusFirebaseController],
|
controllers: [DeviceStatusFirebaseController],
|
||||||
exports: [DeviceStatusFirebaseService],
|
exports: [DeviceStatusFirebaseService, DeviceStatusLogRepository],
|
||||||
})
|
})
|
||||||
export class DeviceStatusFirebaseModule {}
|
export class DeviceStatusFirebaseModule {}
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import { TuyaContext } from '@tuya/tuya-connector-nodejs';
|
|||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { firebaseDataBase } from '../../firebase.config';
|
import { firebaseDataBase } from '../../firebase.config';
|
||||||
import { Database, DataSnapshot, get, ref, set } from 'firebase/database';
|
import { Database, DataSnapshot, get, ref, set } from 'firebase/database';
|
||||||
|
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DeviceStatusFirebaseService {
|
export class DeviceStatusFirebaseService {
|
||||||
private tuya: TuyaContext;
|
private tuya: TuyaContext;
|
||||||
@ -18,6 +19,7 @@ export class DeviceStatusFirebaseService {
|
|||||||
constructor(
|
constructor(
|
||||||
private readonly configService: ConfigService,
|
private readonly configService: ConfigService,
|
||||||
private readonly deviceRepository: DeviceRepository,
|
private readonly deviceRepository: DeviceRepository,
|
||||||
|
private deviceStatusLogRepository: DeviceStatusLogRepository,
|
||||||
) {
|
) {
|
||||||
const accessKey = this.configService.get<string>('auth-config.ACCESS_KEY');
|
const accessKey = this.configService.get<string>('auth-config.ACCESS_KEY');
|
||||||
const secretKey = this.configService.get<string>('auth-config.SECRET_KEY');
|
const secretKey = this.configService.get<string>('auth-config.SECRET_KEY');
|
||||||
@ -175,6 +177,7 @@ export class DeviceStatusFirebaseService {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Update or add status codes
|
// Update or add status codes
|
||||||
|
|
||||||
for (const statusItem of addDeviceStatusDto.status) {
|
for (const statusItem of addDeviceStatusDto.status) {
|
||||||
statusMap.set(statusItem.code, statusItem.value);
|
statusMap.set(statusItem.code, statusItem.value);
|
||||||
}
|
}
|
||||||
@ -184,7 +187,15 @@ export class DeviceStatusFirebaseService {
|
|||||||
code,
|
code,
|
||||||
value,
|
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
|
// Save the updated data to Firebase
|
||||||
await set(dataRef, existingData);
|
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 { ProductRepository } from '@app/common/modules/product/repositories';
|
||||||
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
|
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
|
||||||
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
||||||
|
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
|
||||||
@Module({
|
@Module({
|
||||||
imports: [ConfigModule, DeviceRepositoryModule],
|
imports: [ConfigModule, DeviceRepositoryModule],
|
||||||
controllers: [DoorLockController],
|
controllers: [DoorLockController],
|
||||||
@ -22,6 +23,7 @@ import { SpaceRepository } from '@app/common/modules/space/repositories';
|
|||||||
ProductRepository,
|
ProductRepository,
|
||||||
DeviceStatusFirebaseService,
|
DeviceStatusFirebaseService,
|
||||||
SpaceRepository,
|
SpaceRepository,
|
||||||
|
DeviceStatusLogRepository,
|
||||||
],
|
],
|
||||||
exports: [DoorLockService],
|
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 { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
|
||||||
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
||||||
import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/repositories';
|
import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/repositories';
|
||||||
|
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
|
||||||
@Module({
|
@Module({
|
||||||
imports: [ConfigModule, DeviceRepositoryModule, DoorLockModule],
|
imports: [ConfigModule, DeviceRepositoryModule, DoorLockModule],
|
||||||
controllers: [VisitorPasswordController],
|
controllers: [VisitorPasswordController],
|
||||||
@ -25,6 +26,7 @@ import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/
|
|||||||
SpaceRepository,
|
SpaceRepository,
|
||||||
DeviceRepository,
|
DeviceRepository,
|
||||||
VisitorPasswordRepository,
|
VisitorPasswordRepository,
|
||||||
|
DeviceStatusLogRepository,
|
||||||
],
|
],
|
||||||
exports: [VisitorPasswordService],
|
exports: [VisitorPasswordService],
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user