From 09e8acd28e81f54970a72133ca531fa562d26b50 Mon Sep 17 00:00:00 2001 From: Mateusz Nestorowicz Date: Sun, 1 Aug 2021 20:27:07 +0200 Subject: [PATCH] feat: add config entity --- .../api/src/interfaces/actions.types.d.ts | 29 +++++++++++++++++++ packages/api/src/modules/app.module.ts | 2 ++ .../config/configuration-config.module.ts | 11 +++++++ .../config/configuration-config.service.ts | 12 ++++++++ .../database/entities/config.entity.ts | 22 ++++++++++++++ .../src/modules/database/entities/index.ts | 9 +++++- .../modules/repository/config.repository.ts | 12 ++++++++ packages/api/src/modules/repository/index.ts | 13 +++++++++ .../modules/repository/repository.module.ts | 19 ++---------- packages/api/src/utils/constants.ts | 6 +++- 10 files changed, 117 insertions(+), 18 deletions(-) create mode 100644 packages/api/src/interfaces/actions.types.d.ts create mode 100644 packages/api/src/modules/configuration/config/configuration-config.module.ts create mode 100644 packages/api/src/modules/configuration/config/configuration-config.service.ts create mode 100644 packages/api/src/modules/database/entities/config.entity.ts create mode 100644 packages/api/src/modules/repository/config.repository.ts create mode 100644 packages/api/src/modules/repository/index.ts diff --git a/packages/api/src/interfaces/actions.types.d.ts b/packages/api/src/interfaces/actions.types.d.ts new file mode 100644 index 00000000..b6c93de8 --- /dev/null +++ b/packages/api/src/interfaces/actions.types.d.ts @@ -0,0 +1,29 @@ +export type ActionMode = 'OUTPUT' | 'INPUT'; +export type ActionValue = 'LOW' | 'HIGH'; +export type ActionPin = string | number; + +export type OpenAction = { + type: 'OPEN'; + pin: ActionPin; + mode: ActionMode; + value: ActionValue; +}; + +export type WriteAction = { + type: 'WRITE'; + pin: ActionPin; + value: ActionValue; +}; + +export type SleepAction = { + type: 'SLEEP'; + time: number; +}; + +export type Action = OpenAction | WriteAction | SleepAction; + +export type ActionConfig = { + onInit: Array; + onToggle: Array; + pinDefinition: Record; +}; diff --git a/packages/api/src/modules/app.module.ts b/packages/api/src/modules/app.module.ts index 6a8ee66e..b63dc85c 100644 --- a/packages/api/src/modules/app.module.ts +++ b/packages/api/src/modules/app.module.ts @@ -4,6 +4,7 @@ import { ThrottlerModule } from '@nestjs/throttler'; import { AuthModule } from './auth/auth.module'; import { Config } from './config/config'; import { ConfigModule } from './config/config.module'; +import { ConfigurationModule } from './configuration/configuration.module'; import { DatabaseModule } from './database/database.module'; import { InvitationsModule } from './invitations/invitations.module'; import { MailerModule } from './mailer/mailer.module'; @@ -37,6 +38,7 @@ import { WebsocketModule } from './websocket/websocket.module'; WebsocketModule, TicketModule, PushNotificationsModule, + ConfigurationModule, ], }) export class AppModule {} diff --git a/packages/api/src/modules/configuration/config/configuration-config.module.ts b/packages/api/src/modules/configuration/config/configuration-config.module.ts new file mode 100644 index 00000000..237edcdd --- /dev/null +++ b/packages/api/src/modules/configuration/config/configuration-config.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; + +import { ConfigModule } from '../../config/config.module'; +import { ConfigurationConfigService } from './configuration-config.service'; + +@Module({ + imports: [ConfigModule], + providers: [ConfigurationConfigService], + exports: [ConfigurationConfigService], +}) +export class ConfigurationConfigModule {} diff --git a/packages/api/src/modules/configuration/config/configuration-config.service.ts b/packages/api/src/modules/configuration/config/configuration-config.service.ts new file mode 100644 index 00000000..53bb647e --- /dev/null +++ b/packages/api/src/modules/configuration/config/configuration-config.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@nestjs/common'; + +import { Config } from '../../config/config'; + +@Injectable() +export class ConfigurationConfigService { + constructor(private readonly config: Config) {} + + getDeviceTicket() { + return this.config.device.ticket; + } +} diff --git a/packages/api/src/modules/database/entities/config.entity.ts b/packages/api/src/modules/database/entities/config.entity.ts new file mode 100644 index 00000000..6c025aa6 --- /dev/null +++ b/packages/api/src/modules/database/entities/config.entity.ts @@ -0,0 +1,22 @@ +import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity('config') +export class ConfigEntity { + @PrimaryGeneratedColumn() + public id: string; + + @CreateDateColumn({ + type: 'timestamp', + }) + public createdAt: number; + + @CreateDateColumn({ + type: 'timestamp', + }) + public updatedAt: number; + + @Column({ + type: 'varchar', + }) + public value: string; +} diff --git a/packages/api/src/modules/database/entities/index.ts b/packages/api/src/modules/database/entities/index.ts index ce180348..7d42596d 100644 --- a/packages/api/src/modules/database/entities/index.ts +++ b/packages/api/src/modules/database/entities/index.ts @@ -1,6 +1,13 @@ +import { ConfigEntity } from './config.entity'; import { InvitationEntity } from './invitation.entity'; import { PushNotificationEntity } from './pushNotification.entity'; import { RefreshTokenEntity } from './refreshToken.entity'; import { UserEntity } from './user.entity'; -export default [UserEntity, RefreshTokenEntity, InvitationEntity, PushNotificationEntity]; +export default [ + UserEntity, + RefreshTokenEntity, + InvitationEntity, + PushNotificationEntity, + ConfigEntity, +]; diff --git a/packages/api/src/modules/repository/config.repository.ts b/packages/api/src/modules/repository/config.repository.ts new file mode 100644 index 00000000..1618c178 --- /dev/null +++ b/packages/api/src/modules/repository/config.repository.ts @@ -0,0 +1,12 @@ +import constants from '../../utils/constants'; +import { ConfigEntity } from '../database/entities/config.entity'; +import { BaseRepository } from './base.repository'; + +export class ConfigRepository extends BaseRepository(ConfigEntity) { + async getRaspberryPiActionConfig(): Promise { + const { + DB_CONFIG_KEYS: { DEVICE_ACTION_CONFIG }, + } = constants; + return this.findOne({ where: { id: DEVICE_ACTION_CONFIG } }); + } +} diff --git a/packages/api/src/modules/repository/index.ts b/packages/api/src/modules/repository/index.ts new file mode 100644 index 00000000..a18f24ae --- /dev/null +++ b/packages/api/src/modules/repository/index.ts @@ -0,0 +1,13 @@ +import { ConfigRepository } from './config.repository'; +import { InvitationRepository } from './invitation.repository'; +import { PushNotificationRepository } from './push-notification.repository'; +import { RefreshTokenRepository } from './refresh-token.repository'; +import { UserRepository } from './user.repository'; + +export default [ + UserRepository, + InvitationRepository, + RefreshTokenRepository, + PushNotificationRepository, + ConfigRepository, +]; diff --git a/packages/api/src/modules/repository/repository.module.ts b/packages/api/src/modules/repository/repository.module.ts index ea28012a..e357588b 100644 --- a/packages/api/src/modules/repository/repository.module.ts +++ b/packages/api/src/modules/repository/repository.module.ts @@ -2,24 +2,11 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import entities from '../database/entities'; -import { InvitationRepository } from './invitation.repository'; -import { PushNotificationRepository } from './push-notification.repository'; -import { RefreshTokenRepository } from './refresh-token.repository'; -import { UserRepository } from './user.repository'; +import repositories from '.'; @Module({ imports: [TypeOrmModule.forFeature(entities)], - providers: [ - UserRepository, - InvitationRepository, - RefreshTokenRepository, - PushNotificationRepository, - ], - exports: [ - UserRepository, - InvitationRepository, - RefreshTokenRepository, - PushNotificationRepository, - ], + providers: [...repositories], + exports: [...repositories], }) export class RepositoryModule {} diff --git a/packages/api/src/utils/constants.ts b/packages/api/src/utils/constants.ts index 51705043..fe0faf1e 100644 --- a/packages/api/src/utils/constants.ts +++ b/packages/api/src/utils/constants.ts @@ -10,8 +10,12 @@ const authTokens = { }, }; +const DB_CONFIG_KEYS = { + DEVICE_ACTION_CONFIG: 'DEVICE_ACTION_CONFIG', +}; + const clientEndpoints = { passwordMagicLink: '/passwordRecovery/magicLink', registrationMagicLink: '/registration', }; -export default { authTokens, clientEndpoints }; +export default { authTokens, clientEndpoints, DB_CONFIG_KEYS };