diff --git a/api-v3/src/inspection-visits/inspection-visits.controller.ts b/api-v3/src/inspection-visits/inspection-visits.controller.ts index 7be5b20..c93e054 100644 --- a/api-v3/src/inspection-visits/inspection-visits.controller.ts +++ b/api-v3/src/inspection-visits/inspection-visits.controller.ts @@ -13,11 +13,13 @@ import { 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 { assertMobileInspector } from '../inspection-operations/mobile-inspector-policy'; import { CancelInspectionVisitDto } from './dto/cancel-inspection-visit.dto'; import { CloseInspectionVisitDto } from './dto/close-inspection-visit.dto'; import { CreateInspectionVisitDto } from './dto/create-inspection-visit.dto'; import { ExcludeInspectionVisitAssetDto } from './dto/exclude-inspection-visit-asset.dto'; import { ListInspectionVisitsQueryDto } from './dto/list-inspection-visits-query.dto'; +import { OpenMobileInspectionDto } from './dto/open-mobile-inspection.dto'; import { ReplaceInspectionVisitAssetsDto } from './dto/replace-inspection-visit-assets.dto'; import { ReplaceInspectionVisitTeamDto } from './dto/replace-inspection-visit-team.dto'; import { UpdateInspectionVisitDto } from './dto/update-inspection-visit.dto'; @@ -57,6 +59,41 @@ export class InspectionVisitsController { return this.visits.listPlanningOperators(areaId); } + @Get('mobile/planning-context/areas') + @RequirePermissions('inspections.execute') + mobilePlanningAreas(@CurrentAuth() principal: AuthPrincipal) { + assertMobileInspector(principal); + return this.visits.listPlanningAreas(); + } + + @Get('mobile/planning-context/areas/:areaId/operators') + @RequirePermissions('inspections.execute') + mobilePlanningOperators( + @Param('areaId', new ParseUUIDPipe({ version: '4' })) areaId: string, + @CurrentAuth() principal: AuthPrincipal, + ) { + assertMobileInspector(principal); + return this.visits.listPlanningOperators(areaId); + } + + @Post('mobile/open') + @RequirePermissions('inspections.execute') + async openMobile( + @Body() dto: OpenMobileInspectionDto, + @CurrentAuth() principal: AuthPrincipal, + @Req() request: RequestWithContext, + ) { + assertMobileInspector(principal); + const created = await this.visits.create({ + operationalAreaId: dto.operationalAreaId, + operatorCompanyId: dto.operatorCompanyId, + plannedStartAt: new Date().toISOString(), + leadInspectorUserId: principal.userId, + }, principal, request); + await this.lifecycle.plan(created.id, principal, request); + return this.lifecycle.start(created.id, principal, request); + } + @Get(':id') @RequirePermissions('inspections.read') get(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string) {