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,
|
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> {
|
private async getAccessToken(): Promise<string> {
|
||||||
|
if (!this.useLiveSandHubApis()) {
|
||||||
|
return "mock-sandhub-access-token";
|
||||||
|
}
|
||||||
if (this.loginToken && this.tokenExpiry && this.tokenExpiry > new Date()) {
|
if (this.loginToken && this.tokenExpiry && this.tokenExpiry > new Date()) {
|
||||||
return this.loginToken;
|
return this.loginToken;
|
||||||
}
|
}
|
||||||
@@ -67,6 +204,9 @@ export class SandHubService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async getTejaratAccessToken(): Promise<string> {
|
private async getTejaratAccessToken(): Promise<string> {
|
||||||
|
if (!this.useLiveSandHubApis()) {
|
||||||
|
return "mock-tejarat-access-token";
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
this.tejaratAccessToken &&
|
this.tejaratAccessToken &&
|
||||||
this.tejaratTokenExpiry &&
|
this.tejaratTokenExpiry &&
|
||||||
@@ -122,6 +262,10 @@ export class SandHubService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async makeTejaratRequest(url: string, payload: any, maxRetries = 2) {
|
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 INITIAL_DELAY = 500;
|
||||||
const BACKOFF_FACTOR = 2;
|
const BACKOFF_FACTOR = 2;
|
||||||
|
|
||||||
@@ -183,78 +327,13 @@ export class SandHubService {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const requestUrl = `${baseUrl}/block-inquiry-tejarat`;
|
const requestUrl = `${baseUrl}/block-inquiry-tejarat`;
|
||||||
// const raw = await this.makeTejaratRequest(requestUrl, requestPayload);
|
const raw = this.useLiveSandHubApis()
|
||||||
const raw = {
|
? await this.makeTejaratRequest(requestUrl, requestPayload)
|
||||||
"PrntPlcyCmpDocNo": "1403/1143-70591/200/35",
|
: this.getDefaultMockPlateInquiryRaw();
|
||||||
"MapTypNam": "پرايد هاچ بک -111",
|
if (!this.useLiveSandHubApis()) {
|
||||||
"MtrNum": "5215907",
|
this.logger.debug(
|
||||||
"ShsNum": "NAS431100E5798656",
|
`[MOCK] getTejaratBlockInquiry plate=${JSON.stringify(requestPayload)}`,
|
||||||
"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 mapped = this.mapNewApiResponseToOldFormat(raw);
|
const mapped = this.mapNewApiResponseToOldFormat(raw);
|
||||||
return { raw, mapped };
|
return { raw, mapped };
|
||||||
@@ -265,6 +344,10 @@ export class SandHubService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async makeSandHubRequest(url: string, payload: any, maxRetries = 3) {
|
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 token = await this.getAccessToken();
|
||||||
const INITIAL_DELAY = 1000;
|
const INITIAL_DELAY = 1000;
|
||||||
const BACKOFF_FACTOR = 2;
|
const BACKOFF_FACTOR = 2;
|
||||||
@@ -365,84 +448,20 @@ export class SandHubService {
|
|||||||
rightTwoDigits: String(userDetail.plate.ir),
|
rightTwoDigits: String(userDetail.plate.ir),
|
||||||
nationalCode: userDetail.nationalCodeOfInsurer,
|
nationalCode: userDetail.nationalCodeOfInsurer,
|
||||||
};
|
};
|
||||||
// const requestUrl = `${process.env.SANDHUB_BASE_URL}/block-inquiry-tejarat`;
|
const base = process.env.SANDHUB_BASE_URL ?? "";
|
||||||
// const response = await this.makeSandHubRequest(requestUrl, requestPayload);
|
const requestUrl = `${base}/block-inquiry-tejarat`;
|
||||||
|
|
||||||
let response = {
|
let response: any;
|
||||||
"PrntPlcyCmpDocNo": "1403/1143-70591/200/35",
|
if (this.useLiveSandHubApis()) {
|
||||||
"MapTypNam": "پرايد هاچ بک -111",
|
response = await this.makeSandHubRequest(requestUrl, requestPayload);
|
||||||
"MtrNum": "5215907",
|
} else {
|
||||||
"ShsNum": "NAS431100E5798656",
|
this.logger.debug(
|
||||||
"DisFnYrNum": "0",
|
`[MOCK] getSandHubResponse plate=${JSON.stringify(requestPayload)}`,
|
||||||
"DisLfYrNum": "0",
|
);
|
||||||
"DisPrsnYrNum": "0",
|
response = this.getDefaultMockPlateInquiryRaw();
|
||||||
"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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Map the new API response format to the old format
|
const result = this.mapNewApiResponseToOldFormat(response);
|
||||||
let result = this.mapNewApiResponseToOldFormat(response);
|
|
||||||
|
|
||||||
// if (result.usgCod !== "8") {
|
// if (result.usgCod !== "8") {
|
||||||
// throw new Error("خودرو شما شخصی / سواری نمی باشد")
|
// throw new Error("خودرو شما شخصی / سواری نمی باشد")
|
||||||
|
|||||||
Reference in New Issue
Block a user