fix: treat Tahesab no-records as an empty customer list instead of a 502

Listing all customers no longer fails on the final empty code range, and importing a missing code no longer creates a placeholder person.
This commit is contained in:
2026-10-20 12:26:20 +03:30
parent adb63447ca
commit 86e9ee6c2c
2 changed files with 27 additions and 3 deletions
@@ -507,7 +507,13 @@ export class TahesabPersonLinkService {
dto.moshtariCode,
dto.moshtariCode,
);
row = (asMoshtariList(raw)[0] ?? {}) as Record<string, unknown>;
const found = asMoshtariList(raw)[0];
if (!found) {
throw new NotFoundException(
`مشتری با کد ${dto.moshtariCode} در ته‌حساب یافت نشد.`,
);
}
row = found as Record<string, unknown>;
}
const name = pickName(row) || `مشتری ته‌حساب ${dto.moshtariCode}`;
const tel = pickTel(row);
@@ -176,6 +176,9 @@ export function normalizeMandehResponse(raw: unknown): NormalizedAssets {
};
}
/** ته‌حساب برای بازه/جستجوی بدون نتیجه به‌جای لیست خالی خطای «هیچ رکوردی یافت نشد» می‌دهد */
const NO_RECORDS = { emptyResultOnError: /رکوردی یافت نشد/i };
export class TahesabApi {
constructor(
private readonly http: TahesabHttpClient,
@@ -307,15 +310,30 @@ export class TahesabApi {
[fromCode, toCode],
'POST',
opts?.timeoutMs,
NO_RECORDS,
);
}
doListMoshtariByPhone(phone: string | number) {
return this.call('DoListMoshtari-ByPhone', 'DoListMoshtari', [phone]);
return this.call(
'DoListMoshtari-ByPhone',
'DoListMoshtari',
[phone],
undefined,
undefined,
NO_RECORDS,
);
}
doListMoshtariByName(name: string) {
return this.call('DoListMoshtari-ByName', 'DoListMoshtari', [name]);
return this.call(
'DoListMoshtari-ByName',
'DoListMoshtari',
[name],
undefined,
undefined,
NO_RECORDS,
);
}
/** body key حساس به حروف کوچک مثل همکار */