feat: add user UUID to project creation and validate user existence

This commit is contained in:
faris Aljohari
2025-04-03 12:27:36 +03:00
parent 5e2e95b098
commit 22d98fa177
3 changed files with 33 additions and 3 deletions

View File

@ -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;
}

View File

@ -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],
})

View File

@ -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<BaseResponseDto> {
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) {