From 9a163b0e8595ce3b5e34ab938aaf039f87ade737 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 28 Jan 2025 03:42:52 -0600 Subject: [PATCH] Add Automation Module and Entity --- libs/common/src/database/database.module.ts | 2 + .../automation.repository.module.ts | 11 ++++++ .../modules/automation/dtos/automation.dto.ts | 14 +++++++ .../src/modules/automation/dtos/index.ts | 1 + .../automation/entities/automation.entity.ts | 37 +++++++++++++++++++ .../src/modules/automation/entities/index.ts | 1 + .../repositories/automation.repository.ts | 10 +++++ 7 files changed, 76 insertions(+) create mode 100644 libs/common/src/modules/automation/automation.repository.module.ts create mode 100644 libs/common/src/modules/automation/dtos/automation.dto.ts create mode 100644 libs/common/src/modules/automation/dtos/index.ts create mode 100644 libs/common/src/modules/automation/entities/automation.entity.ts create mode 100644 libs/common/src/modules/automation/entities/index.ts create mode 100644 libs/common/src/modules/automation/repositories/automation.repository.ts diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index cd83fa0..fae80e0 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -37,6 +37,7 @@ import { InviteUserSpaceEntity, } from '../modules/Invite-user/entities'; import { InviteSpaceEntity } from '../modules/space/entities/invite-space.entity'; +import { AutomationEntity } from '../modules/automation/entities'; @Module({ imports: [ TypeOrmModule.forRootAsync({ @@ -82,6 +83,7 @@ import { InviteSpaceEntity } from '../modules/space/entities/invite-space.entity InviteUserEntity, InviteUserSpaceEntity, InviteSpaceEntity, + AutomationEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/modules/automation/automation.repository.module.ts b/libs/common/src/modules/automation/automation.repository.module.ts new file mode 100644 index 0000000..50c998e --- /dev/null +++ b/libs/common/src/modules/automation/automation.repository.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { AutomationEntity } from './entities'; + +@Module({ + providers: [], + exports: [], + controllers: [], + imports: [TypeOrmModule.forFeature([AutomationEntity])], +}) +export class AutomationRepositoryModule {} diff --git a/libs/common/src/modules/automation/dtos/automation.dto.ts b/libs/common/src/modules/automation/dtos/automation.dto.ts new file mode 100644 index 0000000..8a0c495 --- /dev/null +++ b/libs/common/src/modules/automation/dtos/automation.dto.ts @@ -0,0 +1,14 @@ +import { IsNotEmpty, IsString } from 'class-validator'; + +export class AutomationDto { + @IsString() + @IsNotEmpty() + public uuid: string; + + @IsString() + @IsNotEmpty() + public automationTuyaUuid: string; + @IsString() + @IsNotEmpty() + public spaceUuid: string; +} diff --git a/libs/common/src/modules/automation/dtos/index.ts b/libs/common/src/modules/automation/dtos/index.ts new file mode 100644 index 0000000..4cdad58 --- /dev/null +++ b/libs/common/src/modules/automation/dtos/index.ts @@ -0,0 +1 @@ +export * from './automation.dto'; diff --git a/libs/common/src/modules/automation/entities/automation.entity.ts b/libs/common/src/modules/automation/entities/automation.entity.ts new file mode 100644 index 0000000..34f77cd --- /dev/null +++ b/libs/common/src/modules/automation/entities/automation.entity.ts @@ -0,0 +1,37 @@ +import { Column, Entity, JoinColumn, ManyToOne } from 'typeorm'; +import { AutomationDto } from '../dtos'; +import { AbstractEntity } from '../../abstract/entities/abstract.entity'; +import { SpaceEntity } from '../../space/entities'; + +@Entity({ name: 'automation' }) +export class AutomationEntity extends AbstractEntity { + @Column({ + type: 'uuid', + default: () => 'gen_random_uuid()', + nullable: false, + }) + public uuid: string; + + @Column({ + nullable: false, + }) + automationTuyaUuid: string; + + @ManyToOne(() => SpaceEntity, (space) => space.scenes, { + nullable: false, + onDelete: 'CASCADE', + }) + @JoinColumn({ name: 'space_uuid' }) + space: SpaceEntity; + + @Column({ + nullable: false, + default: false, + }) + public disabled: boolean; + + constructor(partial: Partial) { + super(); + Object.assign(this, partial); + } +} diff --git a/libs/common/src/modules/automation/entities/index.ts b/libs/common/src/modules/automation/entities/index.ts new file mode 100644 index 0000000..6c6c641 --- /dev/null +++ b/libs/common/src/modules/automation/entities/index.ts @@ -0,0 +1 @@ +export * from './automation.entity'; diff --git a/libs/common/src/modules/automation/repositories/automation.repository.ts b/libs/common/src/modules/automation/repositories/automation.repository.ts new file mode 100644 index 0000000..d75dd75 --- /dev/null +++ b/libs/common/src/modules/automation/repositories/automation.repository.ts @@ -0,0 +1,10 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { AutomationEntity } from '../entities'; + +@Injectable() +export class AutomationRepository extends Repository { + constructor(private dataSource: DataSource) { + super(AutomationEntity, dataSource.createEntityManager()); + } +}