From df79a4d307b8ecf094d8c7cba1f0290d35bdc29c Mon Sep 17 00:00:00 2001 From: "s.hajizadeh" Date: Sun, 21 Jun 2026 17:11:50 +0330 Subject: [PATCH] upserting the mongo error --- .../inquiry-refresh.service.ts | 80 +++++++++++++++++-- 1 file changed, 72 insertions(+), 8 deletions(-) diff --git a/src/request-management/inquiry-refresh.service.ts b/src/request-management/inquiry-refresh.service.ts index f78ca3b..f52bb5d 100644 --- a/src/request-management/inquiry-refresh.service.ts +++ b/src/request-management/inquiry-refresh.service.ts @@ -137,13 +137,7 @@ export class InquiryRefreshService { let claimsUpdated = 0; if (blameChanged && !dryRun) { - await this.blameRequestDbService.findByIdAndUpdate(doc._id, { - $set: { - parties, - inquiries, - updatedAt: new Date(), - }, - }); + await this.persistBlameCaseUpdates(doc._id, roles, parties, inquiries); claimsUpdated = await this.syncInquiriesToClaims( String(doc._id), @@ -377,8 +371,14 @@ export class InquiryRefreshService { next.insurance.policyNumber; next.insurance.company = mapped.companyPersianName || mapped.CompanyName || next.insurance.company; + const financialCeiling = + mapped.financeCoverage ?? + mapped.FinancialCvrCptl ?? + next.insurance.financialCeiling; next.insurance.financialCeiling = - mapped.financeCoverage || mapped.FinancialCvrCptl || next.insurance.financialCeiling; + financialCeiling !== undefined && financialCeiling !== null + ? String(financialCeiling) + : next.insurance.financialCeiling; next.insurance.startDate = mapped.persianStartDate || mapped.IssueDate || mapped.SatrtDate || next.insurance.startDate; next.insurance.endDate = @@ -387,6 +387,70 @@ export class InquiryRefreshService { return next; } + /** + * Mutate an existing Mongoose document in place instead of $set on a lean-cloned + * parties array (which causes "Cast to embedded failed" on ObjectId sub-fields). + */ + private async persistBlameCaseUpdates( + blameId: string | Types.ObjectId, + roles: PartyRole[], + updatedParties: Record[], + inquiries: Record, + ): Promise { + const blameDoc = await this.blameRequestDbService.findById(blameId); + if (!blameDoc) { + throw new NotFoundException(`Blame case ${blameId} not found`); + } + + for (const role of roles) { + const memParty = updatedParties.find((party) => party?.role === role); + const docIdx = blameDoc.parties.findIndex((party) => party?.role === role); + if (!memParty || docIdx === -1) continue; + + const party = blameDoc.parties[docIdx]; + if (!party.vehicle) party.vehicle = {} as any; + if (!party.insurance) party.insurance = {} as any; + + if (memParty.vehicle?.inquiry) { + party.vehicle.inquiry = memParty.vehicle.inquiry; + } + if (memParty.vehicle?.name !== undefined) { + party.vehicle.name = memParty.vehicle.name; + } + if (memParty.vehicle?.type !== undefined) { + party.vehicle.type = memParty.vehicle.type; + } + if (memParty.vehicle?.plateId !== undefined) { + party.vehicle.plateId = memParty.vehicle.plateId; + } + blameDoc.markModified(`parties.${docIdx}.vehicle`); + + if (memParty.insurance) { + if (memParty.insurance.policyNumber !== undefined) { + party.insurance.policyNumber = memParty.insurance.policyNumber; + } + if (memParty.insurance.company !== undefined) { + party.insurance.company = memParty.insurance.company; + } + if (memParty.insurance.financialCeiling !== undefined) { + party.insurance.financialCeiling = String(memParty.insurance.financialCeiling); + } + if (memParty.insurance.startDate !== undefined) { + party.insurance.startDate = memParty.insurance.startDate; + } + if (memParty.insurance.endDate !== undefined) { + party.insurance.endDate = memParty.insurance.endDate; + } + blameDoc.markModified(`parties.${docIdx}.insurance`); + } + } + + blameDoc.set("inquiries", inquiries); + blameDoc.markModified("inquiries"); + blameDoc.set("updatedAt", new Date()); + await blameDoc.save(); + } + private async syncInquiriesToClaims( blameRequestId: string, inquiries: Record,