From 22d98fa177ccbefd392d9d25fc2f604693a24e67 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:27:36 +0300 Subject: [PATCH] feat: add user UUID to project creation and validate user existence --- src/project/dto/create-project.dto.ts | 8 ++++++++ src/project/project.module.ts | 6 +++++- src/project/services/project.service.ts | 22 ++++++++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/project/dto/create-project.dto.ts b/src/project/dto/create-project.dto.ts index 9637856..58e17ed 100644 --- a/src/project/dto/create-project.dto.ts +++ b/src/project/dto/create-project.dto.ts @@ -18,4 +18,12 @@ export class CreateProjectDto { @IsString() @IsOptional() description?: string; + + @ApiProperty({ + example: 'f5d7e9c3-44bc-4b12-88f1-1b3cda84752e', + description: 'UUID of the user', + }) + @IsString() + @IsNotEmpty() + public userUuid: string; } diff --git a/src/project/project.module.ts b/src/project/project.module.ts index 260df68..f16302f 100644 --- a/src/project/project.module.ts +++ b/src/project/project.module.ts @@ -9,7 +9,10 @@ import { CommunityRepository } from '@app/common/modules/community/repositories' import { InviteUserRepository } from '@app/common/modules/Invite-user/repositiories'; import { ProjectUserController } from './controllers/project-user.controller'; import { ProjectUserService } from './services/project-user.service'; -import { UserSpaceRepository } from '@app/common/modules/user/repositories'; +import { + UserRepository, + UserSpaceRepository, +} from '@app/common/modules/user/repositories'; const CommandHandlers = [CreateOrphanSpaceHandler]; @@ -26,6 +29,7 @@ const CommandHandlers = [CreateOrphanSpaceHandler]; ProjectRepository, InviteUserRepository, UserSpaceRepository, + UserRepository, ], exports: [ProjectService, CqrsModule], }) diff --git a/src/project/services/project.service.ts b/src/project/services/project.service.ts index bd780e5..ad9cdbf 100644 --- a/src/project/services/project.service.ts +++ b/src/project/services/project.service.ts @@ -12,18 +12,20 @@ import { ProjectDto } from '@app/common/modules/project/dtos'; import { PageResponse } from '@app/common/dto/pagination.response.dto'; import { CommandBus } from '@nestjs/cqrs'; import { CreateOrphanSpaceCommand } from '../command/create-orphan-space-command'; +import { UserRepository } from '@app/common/modules/user/repositories'; @Injectable() export class ProjectService { constructor( private readonly projectRepository: ProjectRepository, + private readonly userRepository: UserRepository, private commandBus: CommandBus, ) {} async createProject( createProjectDto: CreateProjectDto, ): Promise { - const { name } = createProjectDto; + const { name, userUuid } = createProjectDto; try { // Check if the project name already exists @@ -35,14 +37,30 @@ export class ProjectService { ); } + // Check if user exists + const user = await this.userRepository.findOne({ + where: { uuid: userUuid }, + }); + if (!user) { + throw new HttpException( + `User with UUID ${userUuid} not found`, + HttpStatus.NOT_FOUND, + ); + } + const newProject = this.projectRepository.create(createProjectDto); const savedProject = await this.projectRepository.save(newProject); + user.project = savedProject; + await this.userRepository.save(user); await this.commandBus.execute(new CreateOrphanSpaceCommand(savedProject)); return new SuccessResponseDto({ message: `Project with ID ${savedProject.uuid} successfully created`, - data: savedProject, + data: { + ...savedProject, + rootUser: { uuid: user.uuid, email: user.email }, + }, statusCode: HttpStatus.CREATED, }); } catch (error) {