forked from Yara724/api
72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
|
|
import { Types } from "mongoose";
|
|
import { ClaimWorkflowStep } from "src/Types&Enums/claim-request-management/claim-workflow-steps.enum";
|
|
import { ClaimStatus } from "src/Types&Enums/claim-request-management/claimStatus.enum";
|
|
import {
|
|
ExpertProfileSnapshot,
|
|
ExpertProfileSnapshotSchema,
|
|
} from "src/request-management/entities/schema/expert-profile-snapshot.schema";
|
|
|
|
@Schema({ _id: false })
|
|
export class ClaimActorLock {
|
|
@Prop({ type: Types.ObjectId })
|
|
actorId: Types.ObjectId;
|
|
|
|
@Prop({ type: String })
|
|
actorName: string;
|
|
|
|
@Prop({ type: String, default: "damage_expert" })
|
|
actorRole: "damage_expert" | "expert" | "admin";
|
|
|
|
/** Damage expert profile when lock was taken (`damage-expert` collection). */
|
|
@Prop({ type: ExpertProfileSnapshotSchema })
|
|
expertProfileSnapshot?: ExpertProfileSnapshot;
|
|
}
|
|
export const ClaimActorLockSchema = SchemaFactory.createForClass(ClaimActorLock);
|
|
|
|
/** Captures queue fields before a damage-expert lock; restored if the lock TTL expires without a reply. */
|
|
@Schema({ _id: false })
|
|
export class ClaimPreLockQueueSnapshot {
|
|
@Prop({ type: String, enum: ClaimStatus, required: true })
|
|
claimStatus: ClaimStatus;
|
|
|
|
@Prop({ type: String, enum: ClaimWorkflowStep, required: true })
|
|
currentStep: ClaimWorkflowStep;
|
|
|
|
@Prop({ type: String, enum: ClaimWorkflowStep, required: false })
|
|
nextStep?: ClaimWorkflowStep;
|
|
}
|
|
export const ClaimPreLockQueueSnapshotSchema = SchemaFactory.createForClass(
|
|
ClaimPreLockQueueSnapshot,
|
|
);
|
|
|
|
@Schema({ _id: false })
|
|
export class ClaimWorkflow {
|
|
@Prop({ type: String, enum: ClaimWorkflowStep })
|
|
currentStep: ClaimWorkflowStep;
|
|
|
|
@Prop({ type: String, enum: ClaimWorkflowStep })
|
|
nextStep: ClaimWorkflowStep;
|
|
|
|
@Prop({ type: [String], enum: ClaimWorkflowStep, default: [] })
|
|
completedSteps?: ClaimWorkflowStep[];
|
|
|
|
@Prop({ type: Boolean, default: false })
|
|
locked?: boolean;
|
|
|
|
@Prop({ type: Date })
|
|
lockedAt?: Date;
|
|
|
|
/** Lock expiry used by UI countdown (typically lockedAt + 15m). */
|
|
@Prop({ type: Date })
|
|
expiredAt?: Date;
|
|
|
|
@Prop({ type: ClaimActorLockSchema })
|
|
lockedBy?: ClaimActorLock;
|
|
|
|
@Prop({ type: ClaimPreLockQueueSnapshotSchema })
|
|
preLockQueueSnapshot?: ClaimPreLockQueueSnapshot;
|
|
}
|
|
export const ClaimWorkflowSchema = SchemaFactory.createForClass(ClaimWorkflow);
|
|
|