From a52b7a0a726d48e3a4c88b276fa0158ab8e7e751 Mon Sep 17 00:00:00 2001 From: SepehrYahyaee <7heycallmegray@gmail.com> Date: Sat, 9 May 2026 14:00:02 +0330 Subject: [PATCH] Added catalog endpoints to claim expert panel --- .../claim-request-management.service.ts | 22 +++++++------- .../expert-claim.v2.controller.ts | 29 ++++++++++++++++++- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/claim-request-management/claim-request-management.service.ts b/src/claim-request-management/claim-request-management.service.ts index deb7579..e21a783 100644 --- a/src/claim-request-management/claim-request-management.service.ts +++ b/src/claim-request-management/claim-request-management.service.ts @@ -4063,17 +4063,17 @@ export class ClaimRequestManagementService { ); } - // At most two non-top sides allowed - const sideSet = new Set( - selectedItems - .map((p) => p.side) - .filter((s) => s !== "top"), - ); - if (sideSet.size > 2) { - throw new BadRequestException( - `At most two of left/right/front/back can be selected. Selected: ${[...sideSet].join(", ")}`, - ); - } + // DISABLED: At most two non-top sides allowed + // const sideSet = new Set( + // selectedItems + // .map((p) => p.side) + // .filter((s) => s !== "top"), + // ); + // if (sideSet.size > 2) { + // throw new BadRequestException( + // `At most two of left/right/front/back can be selected. Selected: ${[...sideSet].join(", ")}`, + // ); + // } const selectedPartDocs = selectedItems.map((p) => catalogItemToSelectedPart(p, catalog), diff --git a/src/expert-claim/expert-claim.v2.controller.ts b/src/expert-claim/expert-claim.v2.controller.ts index 0570eb7..eabc057 100644 --- a/src/expert-claim/expert-claim.v2.controller.ts +++ b/src/expert-claim/expert-claim.v2.controller.ts @@ -6,6 +6,7 @@ import { ApiParam, ApiPropertyOptional, ApiQuery, + ApiResponse, ApiTags, } from "@nestjs/swagger"; import { IsOptional, IsString } from "class-validator"; @@ -18,6 +19,9 @@ import { ExpertClaimService } from "./expert-claim.service"; import { ClaimSubmitResendV2Dto, SubmitExpertReplyV2Dto } from "./dto/expert-claim-v2.dto"; import { UpdateClaimDamagedPartsV2Dto } from "./dto/update-claim-damaged-parts-v2.dto"; import { FactorValidationV2Dto } from "./dto/factor-validation.dto"; +import { ClaimRequestManagementService } from "src/claim-request-management/claim-request-management.service"; +import { OuterPartCatalogItemDto } from "src/claim-request-management/dto/select-outer-parts-v2.dto"; +import { ClaimVehicleTypeV2 } from "src/static/outer-car-parts-catalog"; class InPersonVisitV2Dto { @ApiPropertyOptional({ example: 'Paint damage requires physical inspection' }) @@ -32,7 +36,10 @@ class InPersonVisitV2Dto { @UseGuards(LocalActorAuthGuard, RolesGuard) @Roles(RoleEnum.DAMAGE_EXPERT) export class ExpertClaimV2Controller { - constructor(private readonly expertClaimService: ExpertClaimService) { } + constructor( + private readonly expertClaimService: ExpertClaimService, + private readonly claimRequestManagementService: ClaimRequestManagementService, + ) {} @Get("report/status-counts") @ApiOperation({ @@ -44,6 +51,26 @@ export class ExpertClaimV2Controller { return await this.expertClaimService.getStatusReportBucketsV2(actor); } + /** + * Same catalog as `GET v2/claim-request-management/outer-parts-catalog` so factor/resend payloads use identical part ids. + */ + @Get("outer-parts-catalog") + @ApiOperation({ + summary: "Get outer parts catalog (V2)", + description: + "Returns outer-damage parts with id/key/side. Optional `carType` filter returns only that type catalog.", + }) + @ApiResponse({ + status: 200, + description: "Outer parts catalog", + type: [OuterPartCatalogItemDto], + }) + async getOuterPartsCatalog( + @Query("carType") carType?: ClaimVehicleTypeV2, + ): Promise { + return this.claimRequestManagementService.getOuterPartsCatalogV2(carType); + } + @Get("requests") @ApiOperation({ summary: "List available claim requests for damage expert",