From c7c7709f0ff2d1f2c6497bffecfaad96dd9e4e74 Mon Sep 17 00:00:00 2001 From: SepehrYahyaee <7heycallmegray@gmail.com> Date: Sun, 27 Sep 2026 14:40:29 +0330 Subject: [PATCH] Fix expert identity case search --- src/expert-claim/expert-claim.service.ts | 16 +++++++++------ src/helpers/list-query-v2.spec.ts | 20 +++++++++++++++++-- src/helpers/list-query-v2.ts | 10 ++++++++-- .../request-management.service.ts | 16 +++++++++------ 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/expert-claim/expert-claim.service.ts b/src/expert-claim/expert-claim.service.ts index ccef351..602dc93 100644 --- a/src/expert-claim/expert-claim.service.ts +++ b/src/expert-claim/expert-claim.service.ts @@ -798,12 +798,16 @@ export class ExpertClaimService { nationalCode: party?.person?.nationalCode, nationalCodeOfInsurer: party?.person?.nationalCodeOfInsurer, nationalCodeOfDriver: party?.person?.nationalCodeOfDriver, - inquiryParticipants: Array.isArray(party?.inquiryParticipants) - ? party.inquiryParticipants.map((participant: any) => ({ - phoneNumber: participant?.phoneNumber, - nationalCode: participant?.nationalCode, - })) - : undefined, + participants: ( + Array.isArray(party?.participants) + ? party.participants + : party?.inquiryParticipants + )?.map((participant: any) => ({ + phoneNumber: participant?.phoneNumber, + nationalCode: participant?.nationalCode, + nationalCodeOfInsurer: participant?.nationalCodeOfInsurer, + nationalCodeOfDriver: participant?.nationalCodeOfDriver, + })), })); } if (blameRequestType !== BlameRequestType.CAR_BODY) return out; diff --git a/src/helpers/list-query-v2.spec.ts b/src/helpers/list-query-v2.spec.ts index 62ad1e1..3bf65ed 100644 --- a/src/helpers/list-query-v2.spec.ts +++ b/src/helpers/list-query-v2.spec.ts @@ -35,9 +35,15 @@ describe("applyListQueryV2", () => { parties: [ { person: { - phoneNumber: "0912-123-4567", + phoneNumber: "+98 912 123 4567", nationalCodeOfDriver: "۰۰۱۲۳۴۵۶۷۸", }, + participants: [ + { + phoneNumber: "0913-765-4321", + nationalCode: "۰۰۹۸۷۶۵۴۳۲۱", + }, + ], }, ], }, @@ -55,7 +61,7 @@ describe("applyListQueryV2", () => { }; const byPhone = applyListQueryV2(identityRows, identityGetters, { - phoneNumber: "09121234567", + phoneNumber: "۰۹۱۲۱۲۳۴۵۶۷", }); expect(byPhone.list.map((row) => row.publicId)).toEqual(["PHONE"]); @@ -63,6 +69,16 @@ describe("applyListQueryV2", () => { nationalCode: "0012345678", }); expect(byNationalCode.list.map((row) => row.publicId)).toEqual(["PHONE"]); + + const byParticipantPhone = applyListQueryV2(identityRows, identityGetters, { + phoneNumber: "09137654321", + }); + expect(byParticipantPhone.list.map((row) => row.publicId)).toEqual(["PHONE"]); + + const byParticipantNationalCode = applyListQueryV2(identityRows, identityGetters, { + nationalCode: "۰۰۹۸۷۶۵۴۳۲۱", + }); + expect(byParticipantNationalCode.list.map((row) => row.publicId)).toEqual(["PHONE"]); }); it("sorts by publicId ascending", () => { diff --git a/src/helpers/list-query-v2.ts b/src/helpers/list-query-v2.ts index e40d171..b0ef504 100644 --- a/src/helpers/list-query-v2.ts +++ b/src/helpers/list-query-v2.ts @@ -1,5 +1,6 @@ import type { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; import { BadRequestException } from "@nestjs/common"; +import { normalizeIranMobile } from "src/helpers/iran-mobile"; const MAX_LIMIT = 100; const DEFAULT_LIMIT_WHEN_PAGE_SET = 20; @@ -69,6 +70,11 @@ function isNationalCodeKey(key: string): boolean { return /national[_-]?(code|id)|code[_-]?mell?i|mell?i[_-]?code/i.test(key); } +function normalizePhoneSearchValue(raw: unknown): string { + const digits = normalizeIdentityValue(raw); + return normalizeIranMobile(digits) ?? digits; +} + function collectIdentityValues( value: unknown, matchKey: (key: string) => boolean, @@ -117,7 +123,7 @@ export function applyListQueryV2( totalPages?: number; } { const search = normalizeSearch(query.search); - const phoneNumber = normalizeIdentityValue(query.phoneNumber); + const phoneNumber = normalizePhoneSearchValue(query.phoneNumber); const nationalCode = normalizeIdentityValue(query.nationalCode); let filtered = rows; if (query.fileType && getters.fileType) { @@ -128,7 +134,7 @@ export function applyListQueryV2( if (phoneNumber) { filtered = filtered.filter((row) => collectIdentityValues(row, isPhoneKey).some((value) => - value.includes(phoneNumber), + normalizePhoneSearchValue(value).includes(phoneNumber), ), ); } diff --git a/src/request-management/request-management.service.ts b/src/request-management/request-management.service.ts index 82de477..63becba 100644 --- a/src/request-management/request-management.service.ts +++ b/src/request-management/request-management.service.ts @@ -6636,12 +6636,16 @@ export class RequestManagementService { nationalCode: entry?.person?.nationalCode, nationalCodeOfInsurer: entry?.person?.nationalCodeOfInsurer, nationalCodeOfDriver: entry?.person?.nationalCodeOfDriver, - inquiryParticipants: Array.isArray(entry?.inquiryParticipants) - ? entry.inquiryParticipants.map((participant: any) => ({ - phoneNumber: participant?.phoneNumber, - nationalCode: participant?.nationalCode, - })) - : undefined, + participants: ( + Array.isArray(entry?.participants) + ? entry.participants + : entry?.inquiryParticipants + )?.map((participant: any) => ({ + phoneNumber: participant?.phoneNumber, + nationalCode: participant?.nationalCode, + nationalCodeOfInsurer: participant?.nationalCodeOfInsurer, + nationalCodeOfDriver: participant?.nationalCodeOfDriver, + })), })) : [];