forked from Yara724/api
YARA-832
This commit is contained in:
@@ -40,6 +40,10 @@ export class ClaimWorkflow {
|
|||||||
@Prop({ type: Date })
|
@Prop({ type: Date })
|
||||||
lockedAt?: Date;
|
lockedAt?: Date;
|
||||||
|
|
||||||
|
/** Lock expiry used by UI countdown (typically lockedAt + 15m). */
|
||||||
|
@Prop({ type: Date })
|
||||||
|
expiredAt?: Date;
|
||||||
|
|
||||||
@Prop({ type: ClaimActorLockSchema })
|
@Prop({ type: ClaimActorLockSchema })
|
||||||
lockedBy?: ClaimActorLock;
|
lockedBy?: ClaimActorLock;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -325,6 +325,7 @@ export class ExpertBlameService {
|
|||||||
if (w) {
|
if (w) {
|
||||||
w.locked = false;
|
w.locked = false;
|
||||||
delete w.lockedAt;
|
delete w.lockedAt;
|
||||||
|
delete w.expiredAt;
|
||||||
delete w.lockedBy;
|
delete w.lockedBy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -444,7 +445,11 @@ export class ExpertBlameService {
|
|||||||
filter as any,
|
filter as any,
|
||||||
{
|
{
|
||||||
$set: { "workflow.locked": false },
|
$set: { "workflow.locked": false },
|
||||||
$unset: { "workflow.lockedAt": "", "workflow.lockedBy": "" },
|
$unset: {
|
||||||
|
"workflow.lockedAt": "",
|
||||||
|
"workflow.expiredAt": "",
|
||||||
|
"workflow.lockedBy": "",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{ new: false },
|
{ new: false },
|
||||||
);
|
);
|
||||||
@@ -953,6 +958,9 @@ export class ExpertBlameService {
|
|||||||
$set: {
|
$set: {
|
||||||
"workflow.locked": true,
|
"workflow.locked": true,
|
||||||
"workflow.lockedAt": now,
|
"workflow.lockedAt": now,
|
||||||
|
"workflow.expiredAt": new Date(
|
||||||
|
now.getTime() + this.blameV2LockTtlMs,
|
||||||
|
),
|
||||||
"workflow.lockedBy": {
|
"workflow.lockedBy": {
|
||||||
actorId: new Types.ObjectId(actorDetail.sub),
|
actorId: new Types.ObjectId(actorDetail.sub),
|
||||||
actorName: actorDetail.fullName || "Unknown Expert",
|
actorName: actorDetail.fullName || "Unknown Expert",
|
||||||
@@ -1125,6 +1133,7 @@ export class ExpertBlameService {
|
|||||||
},
|
},
|
||||||
$unset: {
|
$unset: {
|
||||||
"workflow.lockedAt": "",
|
"workflow.lockedAt": "",
|
||||||
|
"workflow.expiredAt": "",
|
||||||
"workflow.lockedBy": "",
|
"workflow.lockedBy": "",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -1308,6 +1317,7 @@ export class ExpertBlameService {
|
|||||||
},
|
},
|
||||||
$unset: {
|
$unset: {
|
||||||
"workflow.lockedAt": "",
|
"workflow.lockedAt": "",
|
||||||
|
"workflow.expiredAt": "",
|
||||||
"workflow.lockedBy": "",
|
"workflow.lockedBy": "",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -1450,6 +1460,7 @@ export class ExpertBlameService {
|
|||||||
},
|
},
|
||||||
$unset: {
|
$unset: {
|
||||||
"workflow.lockedAt": "",
|
"workflow.lockedAt": "",
|
||||||
|
"workflow.expiredAt": "",
|
||||||
"workflow.lockedBy": "",
|
"workflow.lockedBy": "",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ export class ClaimDetailV2ResponseDto {
|
|||||||
actorId: string;
|
actorId: string;
|
||||||
actorName: string;
|
actorName: string;
|
||||||
lockedAt: string;
|
lockedAt: string;
|
||||||
|
expiredAt?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ApiPropertyOptional()
|
@ApiPropertyOptional()
|
||||||
|
|||||||
@@ -2104,12 +2104,15 @@ export class ExpertClaimService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const lockSnapshot = await this.snapshotDamageExpert(actor.sub);
|
const lockSnapshot = await this.snapshotDamageExpert(actor.sub);
|
||||||
|
const lockAt = new Date();
|
||||||
|
const expiredAt = new Date(lockAt.getTime() + this.claimV2WorkflowLockTtlMs);
|
||||||
|
|
||||||
await this.claimCaseDbService.findByIdAndUpdate(claimRequestId, {
|
await this.claimCaseDbService.findByIdAndUpdate(claimRequestId, {
|
||||||
status: ClaimCaseStatus.EXPERT_REVIEWING,
|
status: ClaimCaseStatus.EXPERT_REVIEWING,
|
||||||
claimStatus: ClaimStatus.UNDER_REVIEW,
|
claimStatus: ClaimStatus.UNDER_REVIEW,
|
||||||
'workflow.locked': true,
|
'workflow.locked': true,
|
||||||
'workflow.lockedAt': new Date(),
|
'workflow.lockedAt': lockAt,
|
||||||
|
'workflow.expiredAt': expiredAt,
|
||||||
'workflow.lockedBy': {
|
'workflow.lockedBy': {
|
||||||
actorId: new Types.ObjectId(actor.sub),
|
actorId: new Types.ObjectId(actor.sub),
|
||||||
actorName: actor.fullName,
|
actorName: actor.fullName,
|
||||||
@@ -2206,6 +2209,7 @@ export class ExpertClaimService {
|
|||||||
},
|
},
|
||||||
$unset: {
|
$unset: {
|
||||||
"workflow.lockedAt": "",
|
"workflow.lockedAt": "",
|
||||||
|
"workflow.expiredAt": "",
|
||||||
"workflow.lockedBy": "",
|
"workflow.lockedBy": "",
|
||||||
},
|
},
|
||||||
$push: {
|
$push: {
|
||||||
@@ -2372,6 +2376,11 @@ export class ExpertClaimService {
|
|||||||
status: nextCaseStatus,
|
status: nextCaseStatus,
|
||||||
claimStatus: nextClaimStatus,
|
claimStatus: nextClaimStatus,
|
||||||
'workflow.locked': false,
|
'workflow.locked': false,
|
||||||
|
$unset: {
|
||||||
|
'workflow.lockedAt': '',
|
||||||
|
'workflow.expiredAt': '',
|
||||||
|
'workflow.lockedBy': '',
|
||||||
|
},
|
||||||
'workflow.currentStep': nextStep,
|
'workflow.currentStep': nextStep,
|
||||||
'workflow.nextStep': needsFactorUpload
|
'workflow.nextStep': needsFactorUpload
|
||||||
? ClaimWorkflowStep.INSURER_REVIEW
|
? ClaimWorkflowStep.INSURER_REVIEW
|
||||||
@@ -2486,6 +2495,11 @@ export class ExpertClaimService {
|
|||||||
await this.claimCaseDbService.findByIdAndUpdate(claimRequestId, {
|
await this.claimCaseDbService.findByIdAndUpdate(claimRequestId, {
|
||||||
claimStatus: ClaimStatus.NEEDS_REVISION,
|
claimStatus: ClaimStatus.NEEDS_REVISION,
|
||||||
'workflow.locked': false,
|
'workflow.locked': false,
|
||||||
|
$unset: {
|
||||||
|
'workflow.lockedAt': '',
|
||||||
|
'workflow.expiredAt': '',
|
||||||
|
'workflow.lockedBy': '',
|
||||||
|
},
|
||||||
...(note ? { 'evaluation.visitLocation': note } : {}),
|
...(note ? { 'evaluation.visitLocation': note } : {}),
|
||||||
...(visitSnapshot && {
|
...(visitSnapshot && {
|
||||||
'evaluation.inPersonVisitExpertProfileSnapshot': visitSnapshot,
|
'evaluation.inPersonVisitExpertProfileSnapshot': visitSnapshot,
|
||||||
@@ -2952,6 +2966,7 @@ export class ExpertClaimService {
|
|||||||
actorId: claim.workflow.lockedBy.actorId?.toString(),
|
actorId: claim.workflow.lockedBy.actorId?.toString(),
|
||||||
actorName: claim.workflow.lockedBy.actorName,
|
actorName: claim.workflow.lockedBy.actorName,
|
||||||
lockedAt: (claim.workflow as any).lockedAt?.toISOString(),
|
lockedAt: (claim.workflow as any).lockedAt?.toISOString(),
|
||||||
|
expiredAt: (claim.workflow as any).expiredAt?.toISOString(),
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
owner: claim.owner
|
owner: claim.owner
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ export class Workflow {
|
|||||||
@Prop({ type: Date })
|
@Prop({ type: Date })
|
||||||
lockedAt?: Date;
|
lockedAt?: Date;
|
||||||
|
|
||||||
|
/** Lock expiry used by UI countdown (typically lockedAt + 15m). */
|
||||||
|
@Prop({ type: Date })
|
||||||
|
expiredAt?: Date;
|
||||||
|
|
||||||
@Prop({ type: ActorLockSchema })
|
@Prop({ type: ActorLockSchema })
|
||||||
lockedBy?: ActorLock;
|
lockedBy?: ActorLock;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user