import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { RequirePermission } from '../auth/decorators/require-permission.decorator'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import type { AuthenticatedUser } from '../auth/types/authenticated-user'; import { CreateInspectionDto } from './dto/create-inspection.dto'; import { CreateTaskFromInspectionDto } from './dto/create-task-from-inspection.dto'; import { UpdateInspectionDto } from './dto/update-inspection.dto'; import { InspectionsService } from './inspections.service'; import { Idempotent } from '../common/idempotency/idempotent.decorator'; @ApiTags('inspections') @ApiBearerAuth() @Controller('inspections') export class InspectionsController { constructor(private readonly inspectionsService: InspectionsService) {} @RequirePermission('inspections:read') @Get() findAll() { return this.inspectionsService.findAll(); } @RequirePermission('inspections:read') @Get(':id') findOne(@Param('id') id: string) { return this.inspectionsService.findById(id); } @RequirePermission('inspections:create') @Idempotent() @Post() create( @Body() dto: CreateInspectionDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.inspectionsService.create(dto, actor.id); } @RequirePermission('inspections:update') @Patch(':id') update( @Param('id') id: string, @Body() dto: UpdateInspectionDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.inspectionsService.update(id, dto, actor.id); } @RequirePermission('tasks:create') @Post(':id/create-task') createTask( @Param('id') id: string, @Body() dto: CreateTaskFromInspectionDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.inspectionsService.createTaskFromInspection(id, dto, actor.id); } }