import { Controller, Get, Post, Put, Body, Param, Res, UseGuards } from '@nestjs/common'; import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; import { Response } from 'express'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { RequireCapability } from '../../common/decorators/capability.decorator'; import { ProjectsService } from './projects.service'; @ApiTags('projects') @Controller('projects') @ApiBearerAuth() @UseGuards(JwtAuthGuard) export class ProjectsController { constructor(private service: ProjectsService) {} @Get() @RequireCapability('planning.projects.view') findAll() { return this.service.findAll(); } @Get('export') @RequireCapability('planning.projects.view') async exportCSV(@Res() res: Response) { const csv = await this.service.exportCSV(); res.set({ 'Content-Type': 'text/csv', 'Content-Disposition': 'attachment; filename="projects.csv"' }); res.send(csv); } @Get('planning') @RequireCapability('planning.projects.view') findForPlanning() { return this.service.findForPlanning(); } @Get(':id') @RequireCapability('planning.projects.view') findOne(@Param('id') id: string) { return this.service.findOne(id); } @Post('import') @RequireCapability('planning.projects.edit') importCSV(@Body() rows: any[]) { return this.service.importCSV(rows); } @Post() @RequireCapability('planning.projects.edit') create(@Body() dto: any) { return this.service.create(dto); } @Put(':id') @RequireCapability('planning.projects.edit') update(@Param('id') id: string, @Body() dto: any) { return this.service.update(id, dto); } @Put(':id/planned-date') @RequireCapability('planning.projects.edit') updatePlannedDate(@Param('id') id: string, @Body() dto: { planned_date: string }) { return this.service.updatePlannedDate(id, dto.planned_date); } }