diff --git a/api-v3/src/asset-master/inventory-merge.controller.ts b/api-v3/src/asset-master/inventory-merge.controller.ts new file mode 100644 index 0000000..184aecf --- /dev/null +++ b/api-v3/src/asset-master/inventory-merge.controller.ts @@ -0,0 +1,53 @@ +import { + Body, + Controller, + Get, + Param, + ParseUUIDPipe, + Post, + 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 { MergeInventoryAssetDto } from './dto/merge-inventory-asset.dto'; +import { InventoryMergeService } from './inventory-merge.service'; + +@Controller('assets') +export class InventoryMergeController { + constructor(private readonly merges: InventoryMergeService) {} + + @Get(':id/merge-status') + @RequirePermissions('assets.read') + status(@Param('id', new ParseUUIDPipe({ version: '4' })) id: string) { + return this.merges.status(id); + } + + @Post(':id/merge') + @RequirePermissions('assets.update') + merge( + @Param('id', new ParseUUIDPipe({ version: '4' })) id: string, + @Body() dto: MergeInventoryAssetDto, + @CurrentAuth() principal: AuthPrincipal, + @Req() request: RequestWithContext, + ) { + return this.merges.merge(id, dto, principal, request); + } +} + +@Controller('inspection-visits/:visitId/field-inventory') +export class FieldInventoryMergeController { + constructor(private readonly merges: InventoryMergeService) {} + + @Post(':assetId/merge') + @RequirePermissions('assets.create', 'inspections.execute') + mergeFieldDiscovery( + @Param('visitId', new ParseUUIDPipe({ version: '4' })) visitId: string, + @Param('assetId', new ParseUUIDPipe({ version: '4' })) assetId: string, + @Body() dto: MergeInventoryAssetDto, + @CurrentAuth() principal: AuthPrincipal, + @Req() request: RequestWithContext, + ) { + return this.merges.mergeFromVisit(visitId, assetId, dto, principal, request); + } +}