From 02faca33975d783ffa260215f53427d485b3c5c5 Mon Sep 17 00:00:00 2001 From: hannathkadher Date: Wed, 11 Dec 2024 11:06:41 +0400 Subject: [PATCH] added space model controller for create --- libs/common/src/constants/controller-route.ts | 10 +++++ src/app.module.ts | 3 +- src/space-model/controllers/index.ts | 1 + .../controllers/space-model.controller.ts | 35 ++++++++++++++++++ src/space-model/index.ts | 1 + src/space-model/space-model.module.ts | 37 +++++++++++++++++++ src/space/services/space.service.ts | 7 +++- 7 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 src/space-model/controllers/index.ts create mode 100644 src/space-model/controllers/space-model.controller.ts create mode 100644 src/space-model/index.ts create mode 100644 src/space-model/space-model.module.ts diff --git a/libs/common/src/constants/controller-route.ts b/libs/common/src/constants/controller-route.ts index bd37317..10e20d9 100644 --- a/libs/common/src/constants/controller-route.ts +++ b/libs/common/src/constants/controller-route.ts @@ -266,6 +266,16 @@ export class ControllerRoute { }; }; + static SPACE_MODEL = class { + public static readonly ROUTE = '/projects/:projectUuid/space-models'; + static ACTIONS = class { + public static readonly CREATE_SPACE_MODEL_SUMMARY = + 'Create a New Space Model'; + public static readonly CREATE_SPACE_MODEL_DESCRIPTION = + 'This endpoint allows you to create a new space model within a specified project. A space model defines the structure of spaces, including subspaces, products, and product items, and is uniquely identifiable within the project.'; + }; + }; + static PRODUCT = class { public static readonly ROUTE = 'products'; static ACTIONS = class { diff --git a/src/app.module.ts b/src/app.module.ts index bb5986b..ac06b84 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -23,6 +23,7 @@ import { ScheduleModule } from './schedule/schedule.module'; import { SpaceModule } from './space/space.module'; import { ProductModule } from './product'; import { ProjectModule } from './project'; +import { SpaceModelModule } from './space-model'; @Module({ imports: [ ConfigModule.forRoot({ @@ -34,7 +35,7 @@ import { ProjectModule } from './project'; CommunityModule, SpaceModule, - + SpaceModelModule, GroupModule, DeviceModule, DeviceMessagesSubscriptionModule, diff --git a/src/space-model/controllers/index.ts b/src/space-model/controllers/index.ts new file mode 100644 index 0000000..c12699e --- /dev/null +++ b/src/space-model/controllers/index.ts @@ -0,0 +1 @@ +export * from './space-model.controller'; diff --git a/src/space-model/controllers/space-model.controller.ts b/src/space-model/controllers/space-model.controller.ts new file mode 100644 index 0000000..8475b6c --- /dev/null +++ b/src/space-model/controllers/space-model.controller.ts @@ -0,0 +1,35 @@ +import { ControllerRoute } from '@app/common/constants/controller-route'; +import { Body, Controller, Param, Post, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { SpaceModelService } from '../services'; +import { CreateSpaceModelDto } from '../dtos'; +import { ProjectParam } from 'src/community/dtos'; +import { JwtAuthGuard } from '@app/common/guards/jwt.auth.guard'; +import { BaseResponseDto } from '@app/common/dto/base.response.dto'; + +@ApiTags('Space Model Module') +@Controller({ + version: '1', + path: ControllerRoute.SPACE_MODEL.ROUTE, +}) +export class SpaceModelController { + constructor(private readonly spaceModelService: SpaceModelService) {} + + @ApiBearerAuth() + @UseGuards(JwtAuthGuard) + @ApiOperation({ + summary: ControllerRoute.SPACE_MODEL.ACTIONS.CREATE_SPACE_MODEL_SUMMARY, + description: + ControllerRoute.SPACE_MODEL.ACTIONS.CREATE_SPACE_MODEL_DESCRIPTION, + }) + @Post() + async createSpaceModel( + @Body() createSpaceModelDto: CreateSpaceModelDto, + @Param() projectParam: ProjectParam, + ): Promise { + return await this.spaceModelService.createSpaceModel( + createSpaceModelDto, + projectParam, + ); + } +} diff --git a/src/space-model/index.ts b/src/space-model/index.ts new file mode 100644 index 0000000..8885fc3 --- /dev/null +++ b/src/space-model/index.ts @@ -0,0 +1 @@ +export * from './space-model.module'; diff --git a/src/space-model/space-model.module.ts b/src/space-model/space-model.module.ts new file mode 100644 index 0000000..bbc6245 --- /dev/null +++ b/src/space-model/space-model.module.ts @@ -0,0 +1,37 @@ +import { SpaceRepositoryModule } from '@app/common/modules/space/space.repository.module'; +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { SpaceModelController } from './controllers'; +import { + SpaceModelService, + SpaceProductItemModelService, + SpaceProductModelService, + SubSpaceModelService, +} from './services'; +import { + SpaceModelRepository, + SpaceProductItemModelRepository, + SpaceProductModelRepository, + SubspaceModelRepository, +} from '@app/common/modules/space-model'; +import { ProjectRepository } from '@app/common/modules/project/repositiories'; +import { ProductRepository } from '@app/common/modules/product/repositories'; + +@Module({ + imports: [ConfigModule, SpaceRepositoryModule], + controllers: [SpaceModelController], + providers: [ + SpaceModelService, + SpaceModelRepository, + ProjectRepository, + SubSpaceModelService, + SpaceProductModelService, + SubspaceModelRepository, + SpaceProductModelRepository, + ProductRepository, + SpaceProductItemModelService, + SpaceProductItemModelRepository, + ], + exports: [], +}) +export class SpaceModelModule {} diff --git a/src/space/services/space.service.ts b/src/space/services/space.service.ts index 0055ddf..8189f8c 100644 --- a/src/space/services/space.service.ts +++ b/src/space/services/space.service.ts @@ -5,7 +5,12 @@ import { HttpStatus, Injectable, } from '@nestjs/common'; -import { AddSpaceDto, CommunitySpaceParam, GetSpaceParam, UpdateSpaceDto } from '../dtos'; +import { + AddSpaceDto, + CommunitySpaceParam, + GetSpaceParam, + UpdateSpaceDto, +} from '../dtos'; import { SuccessResponseDto } from '@app/common/dto/success.response.dto'; import { BaseResponseDto } from '@app/common/dto/base.response.dto'; import { CommunityRepository } from '@app/common/modules/community/repositories';