import { Body, Controller, Get, Param, ParseUUIDPipe, Post, Query, Req, } from '@nestjs/common'; import { CurrentAuth } from '../auth/decorators/current-auth.decorator'; import { RequirePermissions } from '../authorization/decorators/require-permissions.decorator'; import type { AuthPrincipal, RequestWithContext } from '../common/http/request-context'; import { CreateFieldFindingDto } from './dto/create-field-finding.dto'; import { FieldFindingActQueryDto } from './dto/field-finding-act-query.dto'; import { FieldFindingsService } from './field-findings.service'; @Controller('inspection-visits/:visitId/field-findings') export class FieldFindingsController { constructor(private readonly fieldFindings: FieldFindingsService) {} @Get(':assetId/options') @RequirePermissions('inspection_findings.create', 'inspections.execute') options( @Param('visitId', new ParseUUIDPipe({ version: '4' })) visitId: string, @Param('assetId', new ParseUUIDPipe({ version: '4' })) assetId: string, @Query() query: FieldFindingActQueryDto, @CurrentAuth() principal: AuthPrincipal, ): Promise { return this.fieldFindings.options(visitId, assetId, query.actId, principal); } @Get(':assetId') @RequirePermissions('inspection_findings.read', 'inspections.execute') list( @Param('visitId', new ParseUUIDPipe({ version: '4' })) visitId: string, @Param('assetId', new ParseUUIDPipe({ version: '4' })) assetId: string, @Query() query: FieldFindingActQueryDto, @CurrentAuth() principal: AuthPrincipal, ): Promise { return this.fieldFindings.list(visitId, assetId, query.actId, principal); } @Post(':assetId') @RequirePermissions('inspection_findings.create', 'inspections.execute') create( @Param('visitId', new ParseUUIDPipe({ version: '4' })) visitId: string, @Param('assetId', new ParseUUIDPipe({ version: '4' })) assetId: string, @Body() dto: CreateFieldFindingDto, @CurrentAuth() principal: AuthPrincipal, @Req() request: RequestWithContext, ): Promise { return this.fieldFindings.create(visitId, assetId, dto, principal, request); } }