fanavaran configs seeding

This commit is contained in:
2026-08-03 09:55:30 +03:30
parent ca5c1900ff
commit f7b7cd13e8
5 changed files with 285 additions and 18 deletions

View File

@@ -0,0 +1,111 @@
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { HydratedDocument } from "mongoose";
import type { FanavaranClientKey } from "src/core/config/fanavaran-client.config";
@Schema({ _id: false })
export class FanavaranAuthConfigEmbed {
@Prop({ type: String, required: true })
appName: string;
@Prop({ type: String, required: true })
secret: string;
@Prop({ type: String, required: true })
username: string;
@Prop({ type: String, required: true })
password: string;
@Prop({ type: String, required: true })
corpId: string;
@Prop({ type: String, required: true })
contractId: string;
@Prop({ type: String, required: true })
location: string;
}
export const FanavaranAuthConfigEmbedSchema = SchemaFactory.createForClass(
FanavaranAuthConfigEmbed,
);
@Schema({ _id: false })
export class FanavaranPayloadDefaultsEmbed {
@Prop({ type: Number, required: true })
AccidentCityId: number;
@Prop({ type: Number, required: true })
AccidentReportTypeId: number;
@Prop({ type: Number, required: true })
AccidentVehicleUsedId: number;
/**
* GEN.03 base claim — کارشناس مسئول پرونده مالی
* (Parsian example: 154 / 4662 — NOT the assessor role).
*/
@Prop({ type: Number, required: true })
ClaimExpertId: number;
/**
* GEN.08 expertise — کارشناس ارزیاب خسارت ثالث مالی (or وکیل/تحقیق).
* (Parsian example: 29; Tejaratno proven send: 2709).
*/
@Prop({ type: Number, required: true })
ExpertiseClaimExpertId: number;
@Prop({ type: Number, required: true })
CompensationReferenceId: number;
@Prop({ type: Number, required: true })
CulpritLicenceTypeId: number;
@Prop({ type: Number, required: true })
CulpritTypeId: number;
@Prop({ type: Number, required: true })
DmgCaseTypeId: number;
@Prop({ type: Number, required: true })
DmgHistoryStatus: number;
@Prop({ type: Number, required: true })
PlaqueKindId: number;
@Prop({ type: Number, required: true })
PlaqueSampleId: number;
@Prop({ type: Number, required: true })
DriverIsOwner: number;
@Prop({ type: Number, required: true })
FaultPercent: number;
@Prop({ type: Number, required: true })
ClaimFileTypeId: number;
}
export const FanavaranPayloadDefaultsEmbedSchema = SchemaFactory.createForClass(
FanavaranPayloadDefaultsEmbed,
);
/**
* Per-tenant Fanavaran auth + payload defaults.
* Seeded on boot when missing; edit in Mongo without redeploying code.
*/
@Schema({ collection: "fanavaranClientConfigs", timestamps: true })
export class FanavaranClientConfig {
@Prop({ type: String, required: true, unique: true, index: true })
key: FanavaranClientKey;
@Prop({ type: FanavaranAuthConfigEmbedSchema, required: true })
auth: FanavaranAuthConfigEmbed;
@Prop({ type: FanavaranPayloadDefaultsEmbedSchema, required: true })
defaults: FanavaranPayloadDefaultsEmbed;
}
export type FanavaranClientConfigDocument =
HydratedDocument<FanavaranClientConfig>;
export const FanavaranClientConfigSchema = SchemaFactory.createForClass(
FanavaranClientConfig,
);