From eac5fce859c966b363e4345f3123870f53b749ca Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Sat, 4 Jan 2025 04:19:48 -0600 Subject: [PATCH] Simplify user retrieval and normalization in ProjectUserService --- src/project/services/project-user.service.ts | 78 ++++---------------- 1 file changed, 14 insertions(+), 64 deletions(-) diff --git a/src/project/services/project-user.service.ts b/src/project/services/project-user.service.ts index f48ddfb..847774f 100644 --- a/src/project/services/project-user.service.ts +++ b/src/project/services/project-user.service.ts @@ -1,18 +1,13 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { BaseResponseDto } from '@app/common/dto/base.response.dto'; import { SuccessResponseDto } from '@app/common/dto/success.response.dto'; - -import { UserStatusEnum } from '@app/common/constants/user-status.enum'; -import { RoleType } from '@app/common/constants/role.type.enum'; import { InviteUserRepository } from '@app/common/modules/Invite-user/repositiories'; -import { UserRepository } from '@app/common/modules/user/repositories'; import { ProjectService } from './project.service'; @Injectable() export class ProjectUserService { constructor( private readonly inviteUserRepository: InviteUserRepository, - private readonly userRepository: UserRepository, private readonly projectService: ProjectService, ) {} @@ -25,8 +20,7 @@ export class ProjectUserService { HttpStatus.NOT_FOUND, ); } - // Fetch invited users - const invitedUsers = await this.inviteUserRepository.find({ + const allUsers = await this.inviteUserRepository.find({ where: { project: { uuid }, isActive: true }, select: [ 'uuid', @@ -38,35 +32,20 @@ export class ProjectUserService { 'phoneNumber', 'jobTitle', 'invitedBy', - 'isEnabled', ], relations: ['roleType'], }); - // Fetch project users - const users = await this.userRepository.find({ - where: { project: { uuid }, isActive: true }, - select: ['uuid', 'firstName', 'lastName', 'email', 'createdAt'], - relations: ['roleType'], - }); - - // Combine both arrays - const allUsers = [...users, ...invitedUsers]; - const normalizedUsers = allUsers.map((user) => { const createdAt = new Date(user.createdAt); const createdDate = createdAt.toLocaleDateString(); const createdTime = createdAt.toLocaleTimeString(); - // Normalize user properties - const normalizedProps = this.normalizeUserProperties(user); - - // Return the normalized user object return { ...user, + roleType: user.roleType.type, createdDate, createdTime, - ...normalizedProps, }; }); @@ -91,8 +70,7 @@ export class ProjectUserService { userUuid: string, ): Promise { try { - let user; - user = await this.inviteUserRepository.findOne({ + const user = await this.inviteUserRepository.findOne({ where: { project: { uuid: projectUuid }, uuid: userUuid, @@ -108,31 +86,28 @@ export class ProjectUserService { 'phoneNumber', 'jobTitle', 'invitedBy', - 'isEnabled', ], relations: ['roleType', 'spaces.space'], }); - if (!user) { - user = await this.userRepository.findOne({ - where: { - project: { uuid: projectUuid }, - uuid: userUuid, - isActive: true, - }, - select: ['uuid', 'firstName', 'lastName', 'email', 'createdAt'], - relations: ['roleType', 'userSpaces.space'], - }); - } + if (!user) { throw new HttpException( `User with ID ${userUuid} not found in project ${projectUuid}`, HttpStatus.NOT_FOUND, ); } - const responseData = this.formatUserResponse(user); + const createdAt = new Date(user.createdAt); + const createdDate = createdAt.toLocaleDateString(); + const createdTime = createdAt.toLocaleTimeString(); return new SuccessResponseDto({ message: `User in project with ID ${projectUuid} retrieved successfully`, - data: responseData, + data: { + ...user, + roleType: user.roleType.type, + createdDate, + createdTime, + spaces: user.spaces.map((space) => space.space), + }, statusCode: HttpStatus.OK, }); } catch (error) { @@ -146,29 +121,4 @@ export class ProjectUserService { ); } } - private formatUserResponse(user: any) { - const createdAt = new Date(user.createdAt); - return { - uuid: user.uuid, - firstName: user.firstName, - lastName: user.lastName, - email: user.email, - createdDate: createdAt.toLocaleDateString(), - createdTime: createdAt.toLocaleTimeString(), - ...this.normalizeUserProperties(user), - }; - } - private normalizeUserProperties(user: any) { - return { - status: user.status ?? UserStatusEnum.ACTIVE, - invitedBy: user.invitedBy ?? RoleType.SPACE_MEMBER, - isEnabled: user.isEnabled ?? true, - phoneNumber: user.phoneNumber ?? null, - jobTitle: user.jobTitle ?? null, - roleType: user.roleType?.type ?? null, - spaces: - user?.spaces?.map((space: any) => space?.space) ?? - user?.userSpaces?.map((space: any) => space?.space), - }; - } }