forked from Yara724/api
Compare commits
3 Commits
b2391751f0
...
b216a363fb
| Author | SHA1 | Date | |
|---|---|---|---|
| b216a363fb | |||
| df6d2bd04d | |||
| f277d87dfa |
@@ -29,7 +29,144 @@ export class SandHubService {
|
||||
private readonly sandHubDbService: SandHubDbService,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* When false (default), no outbound HTTP to SandHub/Tejarat gateways — all inquiries return mocks.
|
||||
* Set `SANDHUB_USE_REAL_API=true` to restore live calls.
|
||||
*/
|
||||
private useLiveSandHubApis(): boolean {
|
||||
return process.env.SANDHUB_USE_REAL_API === "true";
|
||||
}
|
||||
|
||||
/** Fixed plate/insurance inquiry payload used everywhere we mock block-inquiry style APIs. */
|
||||
private getDefaultMockPlateInquiryRaw(): Record<string, unknown> {
|
||||
return {
|
||||
PrntPlcyCmpDocNo: "1403/1143-70591/200/35",
|
||||
MapTypNam: "پرايد هاچ بک -111",
|
||||
MtrNum: "5215907",
|
||||
ShsNum: "NAS431100E5798656",
|
||||
DisFnYrNum: "0",
|
||||
DisLfYrNum: "0",
|
||||
DisPrsnYrNum: "0",
|
||||
DisPrsnYrPrcnt: "0",
|
||||
DisFnYrPrcnt: "0",
|
||||
DisLfYrPrcnt: "0",
|
||||
vin: "IRPC941V2BD798656",
|
||||
MapVehicleSystemName: "ثبت نشده",
|
||||
LfCvrCptl: 0,
|
||||
FnCvrCptl: 0,
|
||||
PrsnCvrCptl: 0,
|
||||
VehicleSystemCode: 1,
|
||||
EdrsJson: '[{"id":1,"Dsc":" الحاقيه توضيحات ندارد"}]',
|
||||
PersonCvrCptl: 12000000000,
|
||||
LifeCvrCptl: 16000000000,
|
||||
FinancialCvrCptl: 4000000000,
|
||||
CarGroupCode: 3,
|
||||
CylCnt: 4,
|
||||
LastCompanyDocumentNumber: "03/1031/2835/1001/662",
|
||||
UsageCode: "8",
|
||||
MapUsageCode: 1,
|
||||
MapUsageName: "شخصي",
|
||||
Plk1: 59,
|
||||
Plk2: 16,
|
||||
Plk3: 419,
|
||||
PlkSrl: 78,
|
||||
PrintEndorsCompanyDocumentNumber: "بيمه نامه الحاقيه ندارد.",
|
||||
EndorseDate: null,
|
||||
InsuranceFullName: null,
|
||||
SystemField: "سايپا",
|
||||
TypeField: "111SE",
|
||||
UsageField: "سواري",
|
||||
MainColorField: "سفيد",
|
||||
SecondColorField: "سفيد شيري",
|
||||
ModelField: "1394",
|
||||
CapacityField: "جمعا 4 نفر",
|
||||
CylinderNumberField: "4",
|
||||
EngineNumberField: "5215907",
|
||||
ChassisNumberField: "NAS431100E5798656",
|
||||
VinNumberField: "IRPC941V2BD798656",
|
||||
InstallDateField: "1403/03/01",
|
||||
AxelNumberField: "2",
|
||||
WheelNumberField: "4",
|
||||
CompanyName: "بیمه سامان",
|
||||
CompanyCode: "15",
|
||||
IssueDate: "1403/04/06",
|
||||
SatrtDate: "1403/04/06",
|
||||
EndDate: "1404/04/06",
|
||||
Thrname: "",
|
||||
EndorseText: null,
|
||||
PolicyHealthLossCount: 0,
|
||||
PolicyFinancialLossCount: 0,
|
||||
PolicyPersonLossCount: 0,
|
||||
Tonage: 0,
|
||||
ThirdPolicyCode: 10502330579,
|
||||
DiscountPersonPercent: null,
|
||||
DiscountThirdPercent: null,
|
||||
SystemCodeCii: 0,
|
||||
SystemNameCii: "ثبت نشده",
|
||||
TypeCodeCii: 12189,
|
||||
TypeNameCii: "پرايد هاچ بک -111",
|
||||
UsageNameCii: "سواري",
|
||||
UsageCodeCii: 1,
|
||||
ModelCii: 1394,
|
||||
damageTypes: [],
|
||||
StatusTypeCode: 1,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Bodies returned from `makeSandHubRequest` in mock mode (same shape callers expect from real API).
|
||||
*/
|
||||
private buildMockSandHubResponseForUrl(url: string): any {
|
||||
const u = (url || "").toLowerCase();
|
||||
if (u.includes("personal-inquiry")) {
|
||||
return {
|
||||
message: "success",
|
||||
data: {
|
||||
firstName: "نام",
|
||||
lastName: "خانوادگی",
|
||||
fatherName: "-",
|
||||
birthCertificateNumber: "-",
|
||||
nin: "-",
|
||||
},
|
||||
};
|
||||
}
|
||||
if (u.includes("driver-license-check")) {
|
||||
return {
|
||||
data: {
|
||||
IsSucceed: true,
|
||||
Message: "mock",
|
||||
},
|
||||
};
|
||||
}
|
||||
if (u.includes("ownership")) {
|
||||
return {
|
||||
data: {
|
||||
IsSuccess: true,
|
||||
},
|
||||
};
|
||||
}
|
||||
if (u.includes("sheba")) {
|
||||
return {
|
||||
ReturnValue: true,
|
||||
HasError: false,
|
||||
Message: "mock-sheba-ok",
|
||||
};
|
||||
}
|
||||
if (u.includes("block-inquiry") || u.includes("tejarat")) {
|
||||
return this.mapNewApiResponseToOldFormat(
|
||||
this.getDefaultMockPlateInquiryRaw(),
|
||||
);
|
||||
}
|
||||
this.logger.warn(
|
||||
`[MOCK] Unrecognized SandHub URL; returning generic OK: ${url}`,
|
||||
);
|
||||
return { data: {}, message: "mock-ok" };
|
||||
}
|
||||
|
||||
private async getAccessToken(): Promise<string> {
|
||||
if (!this.useLiveSandHubApis()) {
|
||||
return "mock-sandhub-access-token";
|
||||
}
|
||||
if (this.loginToken && this.tokenExpiry && this.tokenExpiry > new Date()) {
|
||||
return this.loginToken;
|
||||
}
|
||||
@@ -67,6 +204,9 @@ export class SandHubService {
|
||||
}
|
||||
|
||||
private async getTejaratAccessToken(): Promise<string> {
|
||||
if (!this.useLiveSandHubApis()) {
|
||||
return "mock-tejarat-access-token";
|
||||
}
|
||||
if (
|
||||
this.tejaratAccessToken &&
|
||||
this.tejaratTokenExpiry &&
|
||||
@@ -122,6 +262,10 @@ export class SandHubService {
|
||||
}
|
||||
|
||||
private async makeTejaratRequest(url: string, payload: any, maxRetries = 2) {
|
||||
if (!this.useLiveSandHubApis()) {
|
||||
this.logger.log(`[MOCK] Tejarat POST skipped: ${url}`);
|
||||
return this.getDefaultMockPlateInquiryRaw();
|
||||
}
|
||||
const INITIAL_DELAY = 500;
|
||||
const BACKOFF_FACTOR = 2;
|
||||
|
||||
@@ -183,78 +327,13 @@ export class SandHubService {
|
||||
};
|
||||
|
||||
const requestUrl = `${baseUrl}/block-inquiry-tejarat`;
|
||||
// const raw = await this.makeTejaratRequest(requestUrl, requestPayload);
|
||||
const raw = {
|
||||
"PrntPlcyCmpDocNo": "1403/1143-70591/200/35",
|
||||
"MapTypNam": "پرايد هاچ بک -111",
|
||||
"MtrNum": "5215907",
|
||||
"ShsNum": "NAS431100E5798656",
|
||||
"DisFnYrNum": "0",
|
||||
"DisLfYrNum": "0",
|
||||
"DisPrsnYrNum": "0",
|
||||
"DisPrsnYrPrcnt": "0",
|
||||
"DisFnYrPrcnt": "0",
|
||||
"DisLfYrPrcnt": "0",
|
||||
"vin": "IRPC941V2BD798656",
|
||||
"MapVehicleSystemName": "ثبت نشده",
|
||||
"LfCvrCptl": 0,
|
||||
"FnCvrCptl": 0,
|
||||
"PrsnCvrCptl": 0,
|
||||
"VehicleSystemCode": 1,
|
||||
"EdrsJson": "[{\"id\":1,\"Dsc\":\" الحاقيه توضيحات ندارد\"}]",
|
||||
"PersonCvrCptl": 12000000000,
|
||||
"LifeCvrCptl": 16000000000,
|
||||
"FinancialCvrCptl": 4000000000,
|
||||
"CarGroupCode": 3,
|
||||
"CylCnt": 4,
|
||||
"LastCompanyDocumentNumber": "03/1031/2835/1001/662",
|
||||
"UsageCode": "8",
|
||||
"MapUsageCode": 1,
|
||||
"MapUsageName": "شخصي",
|
||||
"Plk1": 59,
|
||||
"Plk2": 16,
|
||||
"Plk3": 419,
|
||||
"PlkSrl": 78,
|
||||
"PrintEndorsCompanyDocumentNumber": "بيمه نامه الحاقيه ندارد.",
|
||||
"EndorseDate": null,
|
||||
"InsuranceFullName": null,
|
||||
"SystemField": "سايپا",
|
||||
"TypeField": "111SE",
|
||||
"UsageField": "سواري",
|
||||
"MainColorField": "سفيد",
|
||||
"SecondColorField": "سفيد شيري",
|
||||
"ModelField": "1394",
|
||||
"CapacityField": "جمعا 4 نفر",
|
||||
"CylinderNumberField": "4",
|
||||
"EngineNumberField": "5215907",
|
||||
"ChassisNumberField": "NAS431100E5798656",
|
||||
"VinNumberField": "IRPC941V2BD798656",
|
||||
"InstallDateField": "1403/03/01",
|
||||
"AxelNumberField": "2",
|
||||
"WheelNumberField": "4",
|
||||
"CompanyName": "بیمه سامان",
|
||||
"CompanyCode": "15",
|
||||
"IssueDate": "1403/04/06",
|
||||
"SatrtDate": "1403/04/06",
|
||||
"EndDate": "1404/04/06",
|
||||
"Thrname": "",
|
||||
"EndorseText": null,
|
||||
"PolicyHealthLossCount": 0,
|
||||
"PolicyFinancialLossCount": 0,
|
||||
"PolicyPersonLossCount": 0,
|
||||
"Tonage": 0,
|
||||
"ThirdPolicyCode": 10502330579,
|
||||
"DiscountPersonPercent": null,
|
||||
"DiscountThirdPercent": null,
|
||||
"SystemCodeCii": 0,
|
||||
"SystemNameCii": "ثبت نشده",
|
||||
"TypeCodeCii": 12189,
|
||||
"TypeNameCii": "پرايد هاچ بک -111",
|
||||
"UsageNameCii": "سواري",
|
||||
"UsageCodeCii": 1,
|
||||
"ModelCii": 1394,
|
||||
"damageTypes": [],
|
||||
"StatusTypeCode": 1
|
||||
const raw = this.useLiveSandHubApis()
|
||||
? await this.makeTejaratRequest(requestUrl, requestPayload)
|
||||
: this.getDefaultMockPlateInquiryRaw();
|
||||
if (!this.useLiveSandHubApis()) {
|
||||
this.logger.debug(
|
||||
`[MOCK] getTejaratBlockInquiry plate=${JSON.stringify(requestPayload)}`,
|
||||
);
|
||||
}
|
||||
const mapped = this.mapNewApiResponseToOldFormat(raw);
|
||||
return { raw, mapped };
|
||||
@@ -265,6 +344,10 @@ export class SandHubService {
|
||||
}
|
||||
|
||||
private async makeSandHubRequest(url: string, payload: any, maxRetries = 3) {
|
||||
if (!this.useLiveSandHubApis()) {
|
||||
this.logger.log(`[MOCK] SandHub POST skipped: ${url}`);
|
||||
return this.buildMockSandHubResponseForUrl(url);
|
||||
}
|
||||
const token = await this.getAccessToken();
|
||||
const INITIAL_DELAY = 1000;
|
||||
const BACKOFF_FACTOR = 2;
|
||||
@@ -365,84 +448,20 @@ export class SandHubService {
|
||||
rightTwoDigits: String(userDetail.plate.ir),
|
||||
nationalCode: userDetail.nationalCodeOfInsurer,
|
||||
};
|
||||
// const requestUrl = `${process.env.SANDHUB_BASE_URL}/block-inquiry-tejarat`;
|
||||
// const response = await this.makeSandHubRequest(requestUrl, requestPayload);
|
||||
const base = process.env.SANDHUB_BASE_URL ?? "";
|
||||
const requestUrl = `${base}/block-inquiry-tejarat`;
|
||||
|
||||
let response = {
|
||||
"PrntPlcyCmpDocNo": "1403/1143-70591/200/35",
|
||||
"MapTypNam": "پرايد هاچ بک -111",
|
||||
"MtrNum": "5215907",
|
||||
"ShsNum": "NAS431100E5798656",
|
||||
"DisFnYrNum": "0",
|
||||
"DisLfYrNum": "0",
|
||||
"DisPrsnYrNum": "0",
|
||||
"DisPrsnYrPrcnt": "0",
|
||||
"DisFnYrPrcnt": "0",
|
||||
"DisLfYrPrcnt": "0",
|
||||
"vin": "IRPC941V2BD798656",
|
||||
"MapVehicleSystemName": "ثبت نشده",
|
||||
"LfCvrCptl": 0,
|
||||
"FnCvrCptl": 0,
|
||||
"PrsnCvrCptl": 0,
|
||||
"VehicleSystemCode": 1,
|
||||
"EdrsJson": "[{\"id\":1,\"Dsc\":\" الحاقيه توضيحات ندارد\"}]",
|
||||
"PersonCvrCptl": 12000000000,
|
||||
"LifeCvrCptl": 16000000000,
|
||||
"FinancialCvrCptl": 4000000000,
|
||||
"CarGroupCode": 3,
|
||||
"CylCnt": 4,
|
||||
"LastCompanyDocumentNumber": "03/1031/2835/1001/662",
|
||||
"UsageCode": "8",
|
||||
"MapUsageCode": 1,
|
||||
"MapUsageName": "شخصي",
|
||||
"Plk1": 59,
|
||||
"Plk2": 16,
|
||||
"Plk3": 419,
|
||||
"PlkSrl": 78,
|
||||
"PrintEndorsCompanyDocumentNumber": "بيمه نامه الحاقيه ندارد.",
|
||||
"EndorseDate": null,
|
||||
"InsuranceFullName": null,
|
||||
"SystemField": "سايپا",
|
||||
"TypeField": "111SE",
|
||||
"UsageField": "سواري",
|
||||
"MainColorField": "سفيد",
|
||||
"SecondColorField": "سفيد شيري",
|
||||
"ModelField": "1394",
|
||||
"CapacityField": "جمعا 4 نفر",
|
||||
"CylinderNumberField": "4",
|
||||
"EngineNumberField": "5215907",
|
||||
"ChassisNumberField": "NAS431100E5798656",
|
||||
"VinNumberField": "IRPC941V2BD798656",
|
||||
"InstallDateField": "1403/03/01",
|
||||
"AxelNumberField": "2",
|
||||
"WheelNumberField": "4",
|
||||
"CompanyName": "بیمه سامان",
|
||||
"CompanyCode": "15",
|
||||
"IssueDate": "1403/04/06",
|
||||
"SatrtDate": "1403/04/06",
|
||||
"EndDate": "1404/04/06",
|
||||
"Thrname": "",
|
||||
"EndorseText": null,
|
||||
"PolicyHealthLossCount": 0,
|
||||
"PolicyFinancialLossCount": 0,
|
||||
"PolicyPersonLossCount": 0,
|
||||
"Tonage": 0,
|
||||
"ThirdPolicyCode": 10502330579,
|
||||
"DiscountPersonPercent": null,
|
||||
"DiscountThirdPercent": null,
|
||||
"SystemCodeCii": 0,
|
||||
"SystemNameCii": "ثبت نشده",
|
||||
"TypeCodeCii": 12189,
|
||||
"TypeNameCii": "پرايد هاچ بک -111",
|
||||
"UsageNameCii": "سواري",
|
||||
"UsageCodeCii": 1,
|
||||
"ModelCii": 1394,
|
||||
"damageTypes": [],
|
||||
"StatusTypeCode": 1
|
||||
let response: any;
|
||||
if (this.useLiveSandHubApis()) {
|
||||
response = await this.makeSandHubRequest(requestUrl, requestPayload);
|
||||
} else {
|
||||
this.logger.debug(
|
||||
`[MOCK] getSandHubResponse plate=${JSON.stringify(requestPayload)}`,
|
||||
);
|
||||
response = this.getDefaultMockPlateInquiryRaw();
|
||||
}
|
||||
|
||||
// // Map the new API response format to the old format
|
||||
let result = this.mapNewApiResponseToOldFormat(response);
|
||||
const result = this.mapNewApiResponseToOldFormat(response);
|
||||
|
||||
// if (result.usgCod !== "8") {
|
||||
// throw new Error("خودرو شما شخصی / سواری نمی باشد")
|
||||
|
||||
Reference in New Issue
Block a user