mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-15 18:27:05 +00:00
Merge pull request #327 from SyncrowIOT/add-root-user-when-when-create-project
feat: add user UUID to project creation and validate user existence
This commit is contained in:
@ -18,4 +18,12 @@ export class CreateProjectDto {
|
|||||||
@IsString()
|
@IsString()
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
description?: string;
|
description?: string;
|
||||||
|
|
||||||
|
@ApiProperty({
|
||||||
|
example: 'f5d7e9c3-44bc-4b12-88f1-1b3cda84752e',
|
||||||
|
description: 'UUID of the user',
|
||||||
|
})
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
public userUuid: string;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,10 @@ import { CommunityRepository } from '@app/common/modules/community/repositories'
|
|||||||
import { InviteUserRepository } from '@app/common/modules/Invite-user/repositiories';
|
import { InviteUserRepository } from '@app/common/modules/Invite-user/repositiories';
|
||||||
import { ProjectUserController } from './controllers/project-user.controller';
|
import { ProjectUserController } from './controllers/project-user.controller';
|
||||||
import { ProjectUserService } from './services/project-user.service';
|
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];
|
const CommandHandlers = [CreateOrphanSpaceHandler];
|
||||||
|
|
||||||
@ -26,6 +29,7 @@ const CommandHandlers = [CreateOrphanSpaceHandler];
|
|||||||
ProjectRepository,
|
ProjectRepository,
|
||||||
InviteUserRepository,
|
InviteUserRepository,
|
||||||
UserSpaceRepository,
|
UserSpaceRepository,
|
||||||
|
UserRepository,
|
||||||
],
|
],
|
||||||
exports: [ProjectService, CqrsModule],
|
exports: [ProjectService, CqrsModule],
|
||||||
})
|
})
|
||||||
|
@ -12,18 +12,20 @@ import { ProjectDto } from '@app/common/modules/project/dtos';
|
|||||||
import { PageResponse } from '@app/common/dto/pagination.response.dto';
|
import { PageResponse } from '@app/common/dto/pagination.response.dto';
|
||||||
import { CommandBus } from '@nestjs/cqrs';
|
import { CommandBus } from '@nestjs/cqrs';
|
||||||
import { CreateOrphanSpaceCommand } from '../command/create-orphan-space-command';
|
import { CreateOrphanSpaceCommand } from '../command/create-orphan-space-command';
|
||||||
|
import { UserRepository } from '@app/common/modules/user/repositories';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ProjectService {
|
export class ProjectService {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly projectRepository: ProjectRepository,
|
private readonly projectRepository: ProjectRepository,
|
||||||
|
private readonly userRepository: UserRepository,
|
||||||
private commandBus: CommandBus,
|
private commandBus: CommandBus,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async createProject(
|
async createProject(
|
||||||
createProjectDto: CreateProjectDto,
|
createProjectDto: CreateProjectDto,
|
||||||
): Promise<BaseResponseDto> {
|
): Promise<BaseResponseDto> {
|
||||||
const { name } = createProjectDto;
|
const { name, userUuid } = createProjectDto;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Check if the project name already exists
|
// 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 newProject = this.projectRepository.create(createProjectDto);
|
||||||
const savedProject = await this.projectRepository.save(newProject);
|
const savedProject = await this.projectRepository.save(newProject);
|
||||||
|
user.project = savedProject;
|
||||||
|
await this.userRepository.save(user);
|
||||||
|
|
||||||
await this.commandBus.execute(new CreateOrphanSpaceCommand(savedProject));
|
await this.commandBus.execute(new CreateOrphanSpaceCommand(savedProject));
|
||||||
|
|
||||||
return new SuccessResponseDto({
|
return new SuccessResponseDto({
|
||||||
message: `Project with ID ${savedProject.uuid} successfully created`,
|
message: `Project with ID ${savedProject.uuid} successfully created`,
|
||||||
data: savedProject,
|
data: {
|
||||||
|
...savedProject,
|
||||||
|
rootUser: { uuid: user.uuid, email: user.email },
|
||||||
|
},
|
||||||
statusCode: HttpStatus.CREATED,
|
statusCode: HttpStatus.CREATED,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
Reference in New Issue
Block a user