import { Controller, Get, Post, Patch, Delete, Param, Body } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse, ApiParam } from '@nestjs/swagger'; import { WorkspaceService } from '../providers/workspace.service'; import { CreateWorkspaceDto } from '../dto/workspace/create-workspace.dto'; import { UpdateWorkspaceDto } from '../dto/workspace/update-workspace.dto'; import { TMWorkspace } from '../entities/workspace.entity'; import { AdminRoute } from '../../../common/decorators/admin.decorator'; import { PermissionsDec } from '../../../common/decorators/permission.decorator'; import { PermissionEnum } from '../../users/enums/permission.enum'; import { UserDec } from '../../../common/decorators/user.decorator'; import { AuthGuards } from '../../../common/decorators/auth-guard.decorator'; import { ITokenPayload } from '../../auth/interfaces/IToken-payload'; @AuthGuards() @AdminRoute() @ApiTags('Task Manager - Workspaces') @Controller('task-manager/workspaces') export class WorkspaceController { constructor(private readonly workspaceService: WorkspaceService) {} @Get(':id') @PermissionsDec(PermissionEnum.WORKSPACE) @ApiOperation({summary: "Get one workspace by ID"}) @ApiResponse({status: 200, description: 'Received workspace', type: TMWorkspace}) @ApiResponse({status: 404, description: 'Workspace Not Found!'}) @ApiResponse({status: 400, description: 'Bad Request!'}) findOne(@Param('id') id: string): Promise { return this.workspaceService.findOneOrFail(id); } @Post() @PermissionsDec(PermissionEnum.WORKSPACE) @ApiOperation({ summary: 'Create a new workspace' }) @ApiResponse({ status: 201, description: 'Workspace created', type: TMWorkspace }) create(@Body() body: CreateWorkspaceDto): Promise { return this.workspaceService.create(body); } @Patch(':id') @PermissionsDec(PermissionEnum.WORKSPACE) @ApiOperation({ summary: 'Update a workspace' }) @ApiParam({ name: 'id', description: 'Workspace ID' }) @ApiResponse({ status: 200, description: 'Workspace updated', type: TMWorkspace }) @ApiResponse({ status: 404, description: 'Workspace not found' }) update(@Param('id') id: string, @Body() body: UpdateWorkspaceDto): Promise { return this.workspaceService.update(id, body); } @Delete(':id') @PermissionsDec(PermissionEnum.WORKSPACE) @ApiOperation({ summary: 'Delete a workspace' }) @ApiParam({ name: 'id', description: 'Workspace ID' }) @ApiResponse({ status: 200, description: 'Workspace deleted' }) @ApiResponse({ status: 404, description: 'Workspace not found' }) remove(@Param('id') id: string): Promise { return this.workspaceService.remove(id); } @Get('byuser') @ApiOperation({summary: 'Get User WorkSpaces'}) @ApiResponse({ status: 200, description: 'Got Workspaces successfully!' }) @ApiResponse({ status: 404, description: 'Bad Request!' }) findByUser(@UserDec() user: ITokenPayload) { return this.workspaceService.findByUser(user.id, user.permissions); } }