diff --git a/backend/src/modules/projects/controllers/projects.controller.ts b/backend/src/modules/projects/controllers/projects.controller.ts index 578e08d..4b95574 100644 --- a/backend/src/modules/projects/controllers/projects.controller.ts +++ b/backend/src/modules/projects/controllers/projects.controller.ts @@ -11,10 +11,12 @@ import { Query, Res, } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiResponse, ApiParam, ApiQuery } from '@nestjs/swagger'; import { ProjectsService } from '../services/projects.service'; import { CreateProjectDto } from '../dto/create-project.dto'; import { UpdateProjectDto } from '../dto/update-project.dto'; +@ApiTags('projects') @Controller('projects') export class ProjectsController { constructor(private readonly projectsService: ProjectsService) {} @@ -22,6 +24,9 @@ export class ProjectsController { /** * Create a new project */ + @ApiOperation({ summary: 'Create a new project' }) + @ApiResponse({ status: 201, description: 'The project has been successfully created.' }) + @ApiResponse({ status: 400, description: 'Bad request.' }) @Post() @HttpCode(HttpStatus.CREATED) create(@Body() createProjectDto: CreateProjectDto) { @@ -31,6 +36,9 @@ export class ProjectsController { /** * Get all projects or filter by owner ID */ + @ApiOperation({ summary: 'Get all projects or filter by owner ID' }) + @ApiResponse({ status: 200, description: 'Return all projects or projects for a specific owner.' }) + @ApiQuery({ name: 'ownerId', required: false, description: 'Filter projects by owner ID' }) @Get() findAll(@Query('ownerId') ownerId?: string) { if (ownerId) { @@ -42,6 +50,10 @@ export class ProjectsController { /** * Get a project by ID */ + @ApiOperation({ summary: 'Get a project by ID' }) + @ApiResponse({ status: 200, description: 'Return the project.' }) + @ApiResponse({ status: 404, description: 'Project not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) @Get(':id') findOne(@Param('id') id: string) { return this.projectsService.findById(id); @@ -50,6 +62,11 @@ export class ProjectsController { /** * Update a project */ + @ApiOperation({ summary: 'Update a project' }) + @ApiResponse({ status: 200, description: 'The project has been successfully updated.' }) + @ApiResponse({ status: 400, description: 'Bad request.' }) + @ApiResponse({ status: 404, description: 'Project not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) @Patch(':id') update(@Param('id') id: string, @Body() updateProjectDto: UpdateProjectDto) { return this.projectsService.update(id, updateProjectDto); @@ -58,6 +75,10 @@ export class ProjectsController { /** * Delete a project */ + @ApiOperation({ summary: 'Delete a project' }) + @ApiResponse({ status: 204, description: 'The project has been successfully deleted.' }) + @ApiResponse({ status: 404, description: 'Project not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) @Delete(':id') @HttpCode(HttpStatus.NO_CONTENT) remove(@Param('id') id: string) { @@ -67,6 +88,11 @@ export class ProjectsController { /** * Check if a user has access to a project */ + @ApiOperation({ summary: 'Check if a user has access to a project' }) + @ApiResponse({ status: 200, description: 'Returns true if the user has access, false otherwise.' }) + @ApiResponse({ status: 404, description: 'Project not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) + @ApiParam({ name: 'userId', description: 'The ID of the user' }) @Get(':id/check-access/:userId') async checkUserAccess( @Param('id') id: string, @@ -81,6 +107,11 @@ export class ProjectsController { /** * Add a collaborator to a project */ + @ApiOperation({ summary: 'Add a collaborator to a project' }) + @ApiResponse({ status: 201, description: 'The collaborator has been successfully added to the project.' }) + @ApiResponse({ status: 404, description: 'Project or user not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) + @ApiParam({ name: 'userId', description: 'The ID of the user to add as a collaborator' }) @Post(':id/collaborators/:userId') @HttpCode(HttpStatus.CREATED) addCollaborator(@Param('id') id: string, @Param('userId') userId: string) { @@ -90,6 +121,11 @@ export class ProjectsController { /** * Remove a collaborator from a project */ + @ApiOperation({ summary: 'Remove a collaborator from a project' }) + @ApiResponse({ status: 204, description: 'The collaborator has been successfully removed from the project.' }) + @ApiResponse({ status: 404, description: 'Project or collaborator not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) + @ApiParam({ name: 'userId', description: 'The ID of the user to remove as a collaborator' }) @Delete(':id/collaborators/:userId') @HttpCode(HttpStatus.NO_CONTENT) removeCollaborator(@Param('id') id: string, @Param('userId') userId: string) { @@ -99,6 +135,10 @@ export class ProjectsController { /** * Get all collaborators for a project */ + @ApiOperation({ summary: 'Get all collaborators for a project' }) + @ApiResponse({ status: 200, description: 'Return all collaborators for the project.' }) + @ApiResponse({ status: 404, description: 'Project not found.' }) + @ApiParam({ name: 'id', description: 'The ID of the project' }) @Get(':id/collaborators') getCollaborators(@Param('id') id: string) { return this.projectsService.getCollaborators(id);