import { Body, Controller, Get, Param, ParseUUIDPipe, Patch, 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 { CancelInspectionActDto } from './dto/cancel-inspection-act.dto'; import { CreateInspectionActDto } from './dto/create-inspection-act.dto'; import { ListInspectionActsQueryDto } from './dto/list-inspection-acts-query.dto'; import { UpdateInspectionActDto } from './dto/update-inspection-act.dto'; import { InspectionActsService } from './inspection-acts.service'; @Controller('inspection-visits/:visitId/acts') export class InspectionVisitActsController { constructor(private readonly acts: InspectionActsService) {} @Get() @RequirePermissions('inspection_acts.read') list( @Param('visitId', new ParseUUIDPipe({ version: '4' })) visitId: string, @Query() query: ListInspectionActsQueryDto, ) { return this.acts.listForVisit(visitId, query); } @Post() @RequirePermissions('inspection_acts.create') create( @Param('visitId', new ParseUUIDPipe({ version: '4' })) visitId: string, @Body() dto: CreateInspectionActDto, @CurrentAuth() principal: AuthPrincipal, @Req() request: RequestWithContext, ) { return this.acts.create(visitId, dto, principal, request); } } @Controller('inspection-acts') export class InspectionActsController { constructor(private readonly acts: InspectionActsService) {} @Get() @RequirePermissions('inspection_acts.read') list(@Query() query: ListInspectionActsQueryDto) { return this.acts.listGlobal(query); } @Get(':id') @RequirePermissions('inspection_acts.read') get(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string) { return this.acts.getById(id); } @Patch(':id') @RequirePermissions('inspection_acts.update') update( @Param('id', new ParseUUIDPipe({ version: '4' })) id: string, @Body() dto: UpdateInspectionActDto, @CurrentAuth() principal: AuthPrincipal, @Req() request: RequestWithContext, ) { return this.acts.update(id, dto, principal, request); } @Post(':id/cancel') @RequirePermissions('inspection_acts.cancel') cancel( @Param('id', new ParseUUIDPipe({ version: '4' })) id: string, @Body() dto: CancelInspectionActDto, @CurrentAuth() principal: AuthPrincipal, @Req() request: RequestWithContext, ) { return this.acts.cancel(id, dto, principal, request); } }