forked from Yara724/api
update the fanavaran for both tejarat no and parsian clients , dont forget about the env files
This commit is contained in:
@@ -183,24 +183,6 @@ export class FanavaranLookupService {
|
||||
this.logger.log(
|
||||
`[${clientKey}] Fanavaran lookup response status=${response.status} dataCount=${dataCount}`,
|
||||
);
|
||||
this.logger.log(
|
||||
`[${clientKey}] Fanavaran lookup raw response: ${JSON.stringify(
|
||||
response.data,
|
||||
null,
|
||||
2,
|
||||
)}`,
|
||||
);
|
||||
|
||||
if (Array.isArray(response.data) && response.data.length > 0) {
|
||||
const firstItem = response.data[0];
|
||||
if (firstItem && typeof firstItem === "object") {
|
||||
this.logger.log(
|
||||
`[${clientKey}] Fanavaran lookup first item keys: ${Object.keys(
|
||||
firstItem,
|
||||
).join(", ")}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
@@ -255,6 +237,34 @@ export class FanavaranLookupService {
|
||||
return this.fetchFromFanavaran(clientKey, url);
|
||||
}
|
||||
|
||||
async myPolicies(
|
||||
clientKey: FanavaranClientKey,
|
||||
nationalCode: string,
|
||||
insuranceLineId: number = 5,
|
||||
): Promise<unknown> {
|
||||
const url =
|
||||
`${FANAVARAN_LOOKUP_BASE_URL}/common/Policies/inquiry-my-policies` +
|
||||
`?InsuranceLineId=${insuranceLineId}` +
|
||||
`&NationalCode=${encodeURIComponent(nationalCode)}`;
|
||||
return this.fetchFromFanavaran(clientKey, url);
|
||||
}
|
||||
|
||||
async thirdPartyPolicyById(
|
||||
clientKey: FanavaranClientKey,
|
||||
policyId: number,
|
||||
): Promise<unknown> {
|
||||
const url = `${FANAVARAN_LOOKUP_BASE_URL}/car/third-party-car-policies/${policyId}`;
|
||||
return this.fetchFromFanavaran(clientKey, url);
|
||||
}
|
||||
|
||||
async bodyPolicyById(
|
||||
clientKey: FanavaranClientKey,
|
||||
policyId: number,
|
||||
): Promise<unknown> {
|
||||
const url = `${FANAVARAN_LOOKUP_BASE_URL}/car/vehicle-hull-policies/${policyId}`;
|
||||
return this.fetchFromFanavaran(clientKey, url);
|
||||
}
|
||||
|
||||
async inquiryByUniqueIdentifier(
|
||||
clientKey: FanavaranClientKey,
|
||||
params: {
|
||||
@@ -273,6 +283,91 @@ export class FanavaranLookupService {
|
||||
return this.fetchFromFanavaran(clientKey, url);
|
||||
}
|
||||
|
||||
async resolveInsuranceCorpId(
|
||||
clientKey: FanavaranClientKey,
|
||||
): Promise<number | null> {
|
||||
const caption = process.env.INSURANCE_CORP_ID?.trim();
|
||||
if (!caption) {
|
||||
this.logger.warn("resolveInsuranceCorpId: INSURANCE_CORP_ID env not set");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check resolved cache first
|
||||
const cachedId = await this.readCacheFile<number>(clientKey, "insurance-corp-id-resolved.json");
|
||||
if (cachedId !== null) {
|
||||
this.logger.log(`resolveInsuranceCorpId: using cached id=${cachedId} for "${caption}"`);
|
||||
return cachedId;
|
||||
}
|
||||
|
||||
// Try fetching the full list directly from Fanavaran
|
||||
let companies: unknown;
|
||||
const url = `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/insurance-corp`;
|
||||
try {
|
||||
companies = await this.fetchFromFanavaran(clientKey, url);
|
||||
} catch (error) {
|
||||
this.logger.warn(
|
||||
`resolveInsuranceCorpId: Fanavaran fetch failed, trying local lookup endpoint`,
|
||||
);
|
||||
// Fallback: call our own local lookup endpoint
|
||||
try {
|
||||
const localPort = process.env.PORT || 3000;
|
||||
const response = await firstValueFrom(
|
||||
this.httpService.get(`http://localhost:${localPort}/lookups/fanavaran/insurance-corp`, {
|
||||
timeout: 10000,
|
||||
}),
|
||||
);
|
||||
companies = response.data;
|
||||
} catch (localError) {
|
||||
this.logger.error(
|
||||
`resolveInsuranceCorpId: both Fanavaran and local lookup failed`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Array.isArray(companies)) {
|
||||
this.logger.warn(
|
||||
`resolveInsuranceCorpId: insurance-corp response is not an array, type=${typeof companies}`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
this.logger.log(
|
||||
`resolveInsuranceCorpId: got ${companies.length} companies, searching for "${caption}"`,
|
||||
);
|
||||
|
||||
const normalizedCaption = caption
|
||||
.replace(/\s+/g, " ")
|
||||
.toLowerCase()
|
||||
.trim();
|
||||
|
||||
const match = companies.find((c: any) => {
|
||||
if (c?.IsActive !== 1) return false;
|
||||
if (typeof c?.Id !== "number") return false;
|
||||
const cCaption = typeof c?.Caption === "string" ? c.Caption : "";
|
||||
const normalized = cCaption.replace(/\s+/g, " ").toLowerCase().trim();
|
||||
return normalized.includes(normalizedCaption) || normalizedCaption.includes(normalized);
|
||||
});
|
||||
|
||||
if (!match) {
|
||||
this.logger.warn(
|
||||
`resolveInsuranceCorpId: no active company matching "${caption}". Available: ` +
|
||||
companies
|
||||
.filter((c: any) => c?.IsActive === 1)
|
||||
.map((c: any) => `${c.Caption} (${c.Id})`)
|
||||
.join(", "),
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
const corpId = match.Id as number;
|
||||
// Cache both the resolved id and the full list for future use
|
||||
await this.writeCacheFile(clientKey, "insurance-corp-id-resolved.json", corpId);
|
||||
await this.writeCacheFile(clientKey, "insurance-corp.json", companies);
|
||||
this.logger.log(`resolveInsuranceCorpId: resolved id=${corpId} for "${caption}"`);
|
||||
return corpId;
|
||||
}
|
||||
|
||||
mapFanavaranAccidentCausesToReasonOptions(
|
||||
causes: unknown,
|
||||
): { id: number; label: string; fanavaran: number }[] {
|
||||
@@ -297,4 +392,5 @@ export class FanavaranLookupService {
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user