From 8030644fee6a511d86ecf16a3188252467e6db17 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Fri, 9 May 2025 13:11:14 +0300 Subject: [PATCH] refactor: rename presence sensor entities and update related references --- libs/common/src/database/database.module.ts | 8 +++-- .../modules/device/entities/device.entity.ts | 6 ++-- .../entities/presence-sensor.entity.ts | 33 +++++++++++++++++-- .../presence-sensor.repository.module.ts | 12 +++++-- .../presence-sensor.repository.ts | 15 +++++++-- .../modules/space/entities/space.entity.ts | 4 +++ ...dure_insert_fact_daily_space_occupancy.sql | 2 +- ...dure_select_fact_daily_space_occupancy.sql | 2 +- ...ice_presence_detected_insert_statement.sql | 2 +- 9 files changed, 68 insertions(+), 16 deletions(-) diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index f65cb1d..183fbcc 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -51,7 +51,10 @@ import { PowerClampHourlyEntity, PowerClampMonthlyEntity, } from '../modules/power-clamp/entities/power-clamp.entity'; -import { PresenceSensorDailyEntity } from '../modules/presence-sensor/entities'; +import { + PresenceSensorDailyDeviceEntity, + PresenceSensorDailySpaceEntity, +} from '../modules/presence-sensor/entities'; @Module({ imports: [ TypeOrmModule.forRootAsync({ @@ -110,7 +113,8 @@ import { PresenceSensorDailyEntity } from '../modules/presence-sensor/entities'; PowerClampHourlyEntity, PowerClampDailyEntity, PowerClampMonthlyEntity, - PresenceSensorDailyEntity, + PresenceSensorDailyDeviceEntity, + PresenceSensorDailySpaceEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/modules/device/entities/device.entity.ts b/libs/common/src/modules/device/entities/device.entity.ts index 4dc9519..a172862 100644 --- a/libs/common/src/modules/device/entities/device.entity.ts +++ b/libs/common/src/modules/device/entities/device.entity.ts @@ -18,7 +18,7 @@ import { SpaceEntity } from '../../space/entities/space.entity'; import { SubspaceEntity } from '../../space/entities/subspace/subspace.entity'; import { NewTagEntity } from '../../tag'; import { PowerClampHourlyEntity } from '../../power-clamp/entities/power-clamp.entity'; -import { PresenceSensorDailyEntity } from '../../presence-sensor/entities'; +import { PresenceSensorDailyDeviceEntity } from '../../presence-sensor/entities'; @Entity({ name: 'device' }) @Unique(['deviceTuyaUuid']) @@ -83,8 +83,8 @@ export class DeviceEntity extends AbstractEntity { public tag: NewTagEntity; @OneToMany(() => PowerClampHourlyEntity, (powerClamp) => powerClamp.device) powerClampHourly: PowerClampHourlyEntity[]; - @OneToMany(() => PresenceSensorDailyEntity, (sensor) => sensor.device) - presenceSensorDaily: PresenceSensorDailyEntity[]; + @OneToMany(() => PresenceSensorDailyDeviceEntity, (sensor) => sensor.device) + presenceSensorDaily: PresenceSensorDailyDeviceEntity[]; constructor(partial: Partial) { super(); Object.assign(this, partial); diff --git a/libs/common/src/modules/presence-sensor/entities/presence-sensor.entity.ts b/libs/common/src/modules/presence-sensor/entities/presence-sensor.entity.ts index 710b245..facbf8c 100644 --- a/libs/common/src/modules/presence-sensor/entities/presence-sensor.entity.ts +++ b/libs/common/src/modules/presence-sensor/entities/presence-sensor.entity.ts @@ -2,10 +2,11 @@ import { Column, Entity, ManyToOne, Unique } from 'typeorm'; import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { PresenceSensorDto } from '../dtos'; import { DeviceEntity } from '../../device/entities/device.entity'; +import { SpaceEntity } from '../../space/entities/space.entity'; -@Entity({ name: 'presence-sensor-daily-detection' }) +@Entity({ name: 'presence-sensor-daily-device-detection' }) @Unique(['deviceUuid', 'eventDate']) -export class PresenceSensorDailyEntity extends AbstractEntity { +export class PresenceSensorDailyDeviceEntity extends AbstractEntity { @Column({ nullable: false }) public deviceUuid: string; @@ -24,7 +25,33 @@ export class PresenceSensorDailyEntity extends AbstractEntity @ManyToOne(() => DeviceEntity, (device) => device.presenceSensorDaily) device: DeviceEntity; - constructor(partial: Partial) { + constructor(partial: Partial) { + super(); + Object.assign(this, partial); + } +} +@Entity({ name: 'presence-sensor-daily-space-detection' }) +@Unique(['spaceUuid', 'eventDate']) +export class PresenceSensorDailySpaceEntity extends AbstractEntity { + @Column({ nullable: false }) + public spaceUuid: string; + + @Column({ nullable: false, type: 'date' }) + public eventDate: string; + + @Column({ nullable: false }) + public CountMotionDetected: number; + + @Column({ nullable: false }) + public CountPresenceDetected: number; + + @Column({ nullable: false }) + public CountTotalPresenceDetected: number; + + @ManyToOne(() => SpaceEntity, (space) => space.presenceSensorDaily) + space: SpaceEntity; + + constructor(partial: Partial) { super(); Object.assign(this, partial); } diff --git a/libs/common/src/modules/presence-sensor/presence-sensor.repository.module.ts b/libs/common/src/modules/presence-sensor/presence-sensor.repository.module.ts index 54849b2..fc460c8 100644 --- a/libs/common/src/modules/presence-sensor/presence-sensor.repository.module.ts +++ b/libs/common/src/modules/presence-sensor/presence-sensor.repository.module.ts @@ -1,11 +1,19 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { PresenceSensorDailyEntity } from './entities/presence-sensor.entity'; +import { + PresenceSensorDailyDeviceEntity, + PresenceSensorDailySpaceEntity, +} from './entities/presence-sensor.entity'; @Module({ providers: [], exports: [], controllers: [], - imports: [TypeOrmModule.forFeature([PresenceSensorDailyEntity])], + imports: [ + TypeOrmModule.forFeature([ + PresenceSensorDailyDeviceEntity, + PresenceSensorDailySpaceEntity, + ]), + ], }) export class PresenceSensorRepositoryModule {} diff --git a/libs/common/src/modules/presence-sensor/repositories/presence-sensor.repository.ts b/libs/common/src/modules/presence-sensor/repositories/presence-sensor.repository.ts index 2dcd8bc..146eb59 100644 --- a/libs/common/src/modules/presence-sensor/repositories/presence-sensor.repository.ts +++ b/libs/common/src/modules/presence-sensor/repositories/presence-sensor.repository.ts @@ -1,10 +1,19 @@ import { DataSource, Repository } from 'typeorm'; import { Injectable } from '@nestjs/common'; -import { PresenceSensorDailyEntity } from '../entities'; +import { + PresenceSensorDailyDeviceEntity, + PresenceSensorDailySpaceEntity, +} from '../entities'; @Injectable() -export class PresenceSensorDailyRepository extends Repository { +export class PresenceSensorDailyDeviceRepository extends Repository { constructor(private dataSource: DataSource) { - super(PresenceSensorDailyEntity, dataSource.createEntityManager()); + super(PresenceSensorDailyDeviceEntity, dataSource.createEntityManager()); + } +} +@Injectable() +export class PresenceSensorDailySpaceRepository extends Repository { + constructor(private dataSource: DataSource) { + super(PresenceSensorDailySpaceEntity, dataSource.createEntityManager()); } } diff --git a/libs/common/src/modules/space/entities/space.entity.ts b/libs/common/src/modules/space/entities/space.entity.ts index 9087d80..5a7b4d2 100644 --- a/libs/common/src/modules/space/entities/space.entity.ts +++ b/libs/common/src/modules/space/entities/space.entity.ts @@ -10,6 +10,7 @@ import { SpaceModelEntity } from '../../space-model'; import { InviteUserSpaceEntity } from '../../Invite-user/entities'; import { SpaceProductAllocationEntity } from './space-product-allocation.entity'; import { SubspaceEntity } from './subspace/subspace.entity'; +import { PresenceSensorDailySpaceEntity } from '../../presence-sensor/entities'; @Entity({ name: 'space' }) export class SpaceEntity extends AbstractEntity { @@ -111,6 +112,9 @@ export class SpaceEntity extends AbstractEntity { ) public productAllocations: SpaceProductAllocationEntity[]; + @OneToMany(() => PresenceSensorDailySpaceEntity, (sensor) => sensor.space) + presenceSensorDaily: PresenceSensorDailySpaceEntity[]; + constructor(partial: Partial) { super(); Object.assign(this, partial); diff --git a/libs/common/src/sql/procedures/fact_space_occupancy/procedure_insert_fact_daily_space_occupancy.sql b/libs/common/src/sql/procedures/fact_space_occupancy/procedure_insert_fact_daily_space_occupancy.sql index b539aa0..0fca3a1 100644 --- a/libs/common/src/sql/procedures/fact_space_occupancy/procedure_insert_fact_daily_space_occupancy.sql +++ b/libs/common/src/sql/procedures/fact_space_occupancy/procedure_insert_fact_daily_space_occupancy.sql @@ -94,7 +94,7 @@ daily_aggregates AS ( GROUP BY device_id, event_date ) -INSERT INTO public."presence-sensor-daily-detection" ( +INSERT INTO public."presence-sensor-daily-device-detection" ( device_uuid, event_date, count_motion_detected, diff --git a/libs/common/src/sql/procedures/fact_space_occupancy/procedure_select_fact_daily_space_occupancy.sql b/libs/common/src/sql/procedures/fact_space_occupancy/procedure_select_fact_daily_space_occupancy.sql index 4b084c4..e5f189b 100644 --- a/libs/common/src/sql/procedures/fact_space_occupancy/procedure_select_fact_daily_space_occupancy.sql +++ b/libs/common/src/sql/procedures/fact_space_occupancy/procedure_select_fact_daily_space_occupancy.sql @@ -11,7 +11,7 @@ WITH params AS ( A.count_motion_detected, A.count_presence_detected, A.count_total_presence_detected - FROM public."presence-sensor-daily-detection" AS A + FROM public."presence-sensor-daily-device-detection" AS A JOIN params P ON TRUE WHERE A.device_uuid::text = ANY(P.device_ids) AND (P.month IS NULL diff --git a/libs/common/src/sql/queries/fact_hourly_device_presence_detected/fact_daily_device_presence_detected_insert_statement.sql b/libs/common/src/sql/queries/fact_hourly_device_presence_detected/fact_daily_device_presence_detected_insert_statement.sql index ace575c..4affd7c 100644 --- a/libs/common/src/sql/queries/fact_hourly_device_presence_detected/fact_daily_device_presence_detected_insert_statement.sql +++ b/libs/common/src/sql/queries/fact_hourly_device_presence_detected/fact_daily_device_presence_detected_insert_statement.sql @@ -85,7 +85,7 @@ daily_aggregate AS ( GROUP BY device_id, event_date ) -INSERT INTO public."presence-sensor-daily-detection" ( +INSERT INTO public."presence-sensor-daily-device-detection" ( device_uuid, event_date, count_motion_detected,