forked from Yara724/api
Fixed claim/blame damagedParts
This commit is contained in:
@@ -1,32 +1,15 @@
|
||||
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
|
||||
import { Schema as MongooseSchema } from "mongoose";
|
||||
import { CarDamagePartModel, CarDamagePartOtherModel } from "./car-parts.schema";
|
||||
|
||||
@Schema({ _id: false })
|
||||
export class SelectedOuterPartV2 {
|
||||
@Prop({ type: Number })
|
||||
id: number;
|
||||
|
||||
@Prop({ type: String })
|
||||
key: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
side: string;
|
||||
}
|
||||
export const SelectedOuterPartV2Schema =
|
||||
SchemaFactory.createForClass(SelectedOuterPartV2);
|
||||
|
||||
@Schema({ _id: false })
|
||||
export class ClaimDamageSelection {
|
||||
/**
|
||||
* V2: Array of selected damaged outer car part names
|
||||
* Examples: ['hood', 'front_right_door', 'rear_bumper']
|
||||
* V2: Selected outer damaged parts (ordered). Prefer objects
|
||||
* `{ id, name, side, label_fa, catalogKey? }`; legacy string keys are still accepted until migrated.
|
||||
*/
|
||||
@Prop({ type: [String], default: [] })
|
||||
selectedParts?: string[];
|
||||
|
||||
/** Structured selected outer parts with id + side for better downstream handling. */
|
||||
@Prop({ type: [SelectedOuterPartV2Schema], default: [] })
|
||||
selectedOuterParts?: SelectedOuterPartV2[];
|
||||
@Prop({ type: [MongooseSchema.Types.Mixed], default: [] })
|
||||
selectedParts?: unknown[];
|
||||
|
||||
/**
|
||||
* V2: Array of selected other (non-body) damaged parts
|
||||
@@ -46,4 +29,3 @@ export class ClaimDamageSelection {
|
||||
}
|
||||
export const ClaimDamageSelectionSchema =
|
||||
SchemaFactory.createForClass(ClaimDamageSelection);
|
||||
|
||||
|
||||
@@ -13,11 +13,12 @@ export class ClaimPartPricing {
|
||||
partId: string;
|
||||
|
||||
/**
|
||||
* Legacy string or structured `{ part, side }` from expert reply DTOs (V1/V2).
|
||||
* Unified outer-part snapshot `{ id?, name, side, label_fa, catalogKey? }` (same as
|
||||
* `damage.selectedParts` / capture). Legacy: string or `{ part?, side? }` (expert UI).
|
||||
* Must be Mixed — objects cannot cast to String.
|
||||
*/
|
||||
@Prop({ type: MongooseSchema.Types.Mixed })
|
||||
carPartDamage?: string | { part?: string; side?: string };
|
||||
carPartDamage?: unknown;
|
||||
|
||||
@Prop({ type: String })
|
||||
typeOfDamage?: string;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
|
||||
import { Types } from "mongoose";
|
||||
import { Schema as MongooseSchema, Types } from "mongoose";
|
||||
import { AiImagesModel } from "./ai-image.schema";
|
||||
import { CarGreenCardModel } from "./car-green-card.schema";
|
||||
import { ImageRequiredModel } from "./image-required.schema";
|
||||
@@ -20,6 +20,39 @@ export class CapturedImage {
|
||||
}
|
||||
export const CapturedImageSchema = SchemaFactory.createForClass(CapturedImage);
|
||||
|
||||
/** One row per selected damaged part (index-aligned with `damage.selectedParts`). */
|
||||
@Schema({ _id: false })
|
||||
export class DamagedPartMediaV2Row {
|
||||
@Prop({ type: Number })
|
||||
id?: number;
|
||||
|
||||
@Prop({ type: String })
|
||||
name?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
side?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
label_fa?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
catalogKey?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
path?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
fileName?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
url?: string;
|
||||
|
||||
@Prop({ type: Date })
|
||||
capturedAt?: Date;
|
||||
}
|
||||
export const DamagedPartMediaV2RowSchema =
|
||||
SchemaFactory.createForClass(DamagedPartMediaV2Row);
|
||||
|
||||
@Schema({ _id: false })
|
||||
export class ClaimMedia {
|
||||
@Prop({ type: CarGreenCardModel })
|
||||
@@ -46,15 +79,10 @@ export class ClaimMedia {
|
||||
carAngles?: Map<string, CapturedImage>;
|
||||
|
||||
/**
|
||||
* V2: Damaged parts captures
|
||||
* Map of part key to captured image
|
||||
* V2: Damaged parts captures — prefer an array (index matches `damage.selectedParts`).
|
||||
* Legacy documents may store a plain object map keyed by part slug until migrated on write.
|
||||
*/
|
||||
@Prop({
|
||||
type: Map,
|
||||
of: CapturedImageSchema,
|
||||
default: () => ({}),
|
||||
})
|
||||
damagedParts?: Map<string, CapturedImage>;
|
||||
@Prop({ type: MongooseSchema.Types.Mixed })
|
||||
damagedParts?: DamagedPartMediaV2Row[] | Record<string, unknown>;
|
||||
}
|
||||
export const ClaimMediaSchema = SchemaFactory.createForClass(ClaimMedia);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user