From 4f33a0325fa3307cb9cb3cc42c0e43c74f5cff7d Mon Sep 17 00:00:00 2001 From: Yehor Dremliuha Date: Wed, 26 Jun 2024 20:35:37 +0100 Subject: [PATCH] Add endpoint to remove views --- .../src/project/project.controller.ts | 41 +++++++++++++++++++ .../repositories/projects-views.repository.ts | 4 ++ 2 files changed, 45 insertions(+) diff --git a/apps/production/src/project/project.controller.ts b/apps/production/src/project/project.controller.ts index 0b2466ea..034bd4cb 100644 --- a/apps/production/src/project/project.controller.ts +++ b/apps/production/src/project/project.controller.ts @@ -29,6 +29,7 @@ import { ApiBearerAuth, ApiOperation, ApiOkResponse, + ApiNoContentResponse, } from '@nestjs/swagger' import { ILike } from 'typeorm' import * as _isEmpty from 'lodash/isEmpty' @@ -1988,4 +1989,44 @@ export class ProjectController { return this.projectsViewsRepository.findView(params.viewId) } + + @ApiOperation({ summary: 'Delete project view' }) + @ApiNoContentResponse() + @ApiBearerAuth() + @HttpCode(HttpStatus.NO_CONTENT) + @Delete(':projectId/views/:viewId') + @UseGuards(JwtAccessTokenGuard, RolesGuard) + @Roles(UserType.CUSTOMER, UserType.ADMIN) + async deleteProjectView( + @Param() params: ProjectIdDto & ProjectViewIdDto, + @CurrentUserId() userId: string, + ) { + const project = await this.projectService.findProject(params.projectId, [ + 'admin', + 'share', + ]) + + if (!project) { + throw new NotFoundException('Project not found.') + } + + const user = await this.userService.findUserV2(userId, ['roles']) + + if (!user) { + throw new NotFoundException('User not found.') + } + + this.projectService.allowedToManage(project, userId, user.roles) + + const view = await this.projectsViewsRepository.findProjectView( + params.projectId, + params.viewId, + ) + + if (!view) { + throw new NotFoundException('View not found.') + } + + await this.projectsViewsRepository.deleteProjectView(params.viewId) + } } diff --git a/apps/production/src/project/repositories/projects-views.repository.ts b/apps/production/src/project/repositories/projects-views.repository.ts index cca32252..733cd8f6 100644 --- a/apps/production/src/project/repositories/projects-views.repository.ts +++ b/apps/production/src/project/repositories/projects-views.repository.ts @@ -34,4 +34,8 @@ export class ProjectsViewsRepository { async updateProjectView(id: string, data: UpdateProjectViewDto) { await this.viewsRepository.update({ id }, data) } + + async deleteProjectView(id: string) { + await this.viewsRepository.delete({ id }) + } }