forked from Yara724/api
155 lines
4.2 KiB
TypeScript
155 lines
4.2 KiB
TypeScript
import { ApiProperty, ApiPropertyOptional, PartialType } from "@nestjs/swagger";
|
|
import {
|
|
EXTERNAL_INQUIRY_TYPES,
|
|
ExternalInquiryFlags,
|
|
mergeExternalInquiryFlags,
|
|
} from "src/common/types/external-inquiry.types";
|
|
import { IsBoolean, IsMongoId, IsOptional, ValidateNested } from "class-validator";
|
|
import { Type } from "class-transformer";
|
|
|
|
export class ExternalInquiryFlagsDto implements ExternalInquiryFlags {
|
|
@ApiProperty({
|
|
description: "Third-party plate / policy block inquiry (Tejarat or ESG policyByPlate).",
|
|
example: false,
|
|
})
|
|
@IsBoolean()
|
|
thirdPartyPlate: boolean;
|
|
|
|
@ApiProperty({
|
|
description: "CAR_BODY (badane) plate inquiry.",
|
|
example: false,
|
|
})
|
|
@IsBoolean()
|
|
carBodyPlate: boolean;
|
|
|
|
@ApiProperty({
|
|
description: "Personal identity inquiry (national code + birth date).",
|
|
example: false,
|
|
})
|
|
@IsBoolean()
|
|
personalIdentity: boolean;
|
|
|
|
@ApiProperty({
|
|
description: "Sheba account validation.",
|
|
example: false,
|
|
})
|
|
@IsBoolean()
|
|
sheba: boolean;
|
|
|
|
@ApiProperty({
|
|
description: "Driving licence check.",
|
|
example: false,
|
|
})
|
|
@IsBoolean()
|
|
drivingLicense: boolean;
|
|
|
|
@ApiProperty({
|
|
description: "Vehicle ownership validation.",
|
|
example: false,
|
|
})
|
|
@IsBoolean()
|
|
carOwnership: boolean;
|
|
}
|
|
|
|
export class UpdateClientExternalInquiriesDto extends PartialType(
|
|
ExternalInquiryFlagsDto,
|
|
) {}
|
|
|
|
export class ClientExternalInquiriesViewDto {
|
|
@ApiProperty({ example: "664a1b2c3d4e5f6789012345" })
|
|
clientId: string;
|
|
|
|
@ApiProperty({ example: 8 })
|
|
clientCode: number;
|
|
|
|
@ApiProperty({ example: "بیمه پارسیان" })
|
|
clientName: string;
|
|
|
|
@ApiProperty({
|
|
description:
|
|
"Global master switch from `system_settings.externalApis.sandHubUseLiveApi`. When false, all inquiries use mocks regardless of these flags.",
|
|
})
|
|
globalSandHubLiveEnabled: boolean;
|
|
|
|
@ApiProperty({ type: ExternalInquiryFlagsDto })
|
|
externalInquiries: ExternalInquiryFlags;
|
|
|
|
@ApiProperty({
|
|
description: "Effective live flags after applying the global master switch.",
|
|
type: ExternalInquiryFlagsDto,
|
|
})
|
|
effectiveLive: ExternalInquiryFlags;
|
|
}
|
|
|
|
export class ClientExternalInquiriesListDto {
|
|
@ApiProperty({ type: [ClientExternalInquiriesViewDto] })
|
|
items: ClientExternalInquiriesViewDto[];
|
|
}
|
|
|
|
export class ClientExternalInquiriesCatalogDto {
|
|
@ApiProperty({
|
|
enum: EXTERNAL_INQUIRY_TYPES,
|
|
isArray: true,
|
|
description: "Supported inquiry kinds stored on each client document.",
|
|
})
|
|
inquiryTypes: readonly string[];
|
|
|
|
@ApiProperty({
|
|
description:
|
|
"Global master switch path: PATCH /system-settings or PATCH /client/external-inquiries-live",
|
|
})
|
|
globalSettingPath: string;
|
|
|
|
@ApiProperty({
|
|
description: "Per-insurer CRUD base path (public for now).",
|
|
example: "/client/{clientId}/external-inquiries",
|
|
})
|
|
perClientSettingPath: string;
|
|
}
|
|
|
|
/** Build a view DTO from a lean client document. */
|
|
export function toClientExternalInquiriesView(
|
|
client: {
|
|
_id?: unknown;
|
|
clientCode?: number;
|
|
clientName?: { persian?: string; english?: string } | string;
|
|
settings?: { externalInquiries?: Partial<ExternalInquiryFlags> };
|
|
},
|
|
globalSandHubLiveEnabled: boolean,
|
|
): ClientExternalInquiriesViewDto {
|
|
const flags = mergeExternalInquiryFlags(client.settings?.externalInquiries);
|
|
const effectiveLive = {} as ExternalInquiryFlags;
|
|
for (const key of EXTERNAL_INQUIRY_TYPES) {
|
|
effectiveLive[key] = globalSandHubLiveEnabled && flags[key] === true;
|
|
}
|
|
const name =
|
|
typeof client.clientName === "string"
|
|
? client.clientName
|
|
: client.clientName?.persian ||
|
|
client.clientName?.english ||
|
|
String(client.clientCode ?? "");
|
|
|
|
return {
|
|
clientId: String(client._id ?? ""),
|
|
clientCode: Number(client.clientCode ?? 0),
|
|
clientName: name,
|
|
globalSandHubLiveEnabled,
|
|
externalInquiries: flags,
|
|
effectiveLive,
|
|
};
|
|
}
|
|
|
|
export class ClientIdParamDto {
|
|
@ApiProperty({ description: "Mongo ObjectId of the insurer client document" })
|
|
@IsMongoId()
|
|
clientId: string;
|
|
}
|
|
|
|
/** Optional nested patch used internally when validating partial bodies. */
|
|
export class ExternalInquiryFlagsPatchDto {
|
|
@IsOptional()
|
|
@ValidateNested()
|
|
@Type(() => UpdateClientExternalInquiriesDto)
|
|
externalInquiries?: UpdateClientExternalInquiriesDto;
|
|
}
|