Merge pull request 'Эпик 4 re-ревью: fail-fast tx_hash' (#13) from chore/re-review-E4-fail-fast-tx-hash into marketplace2

Reviewed-on: #13
This commit was merged in pull request #13.
This commit is contained in:
2026-05-20 17:03:28 +00:00
3 changed files with 28 additions and 3 deletions
@@ -142,7 +142,16 @@ export class MarketplaceOrderCancelService {
private normalizeTxHash(tx: unknown): string {
const t = tx as { transaction?: { id?: string }; processed?: { id?: string } };
return t?.transaction?.id ?? t?.processed?.id ?? 'unknown';
const hash = t?.transaction?.id ?? t?.processed?.id;
if (!hash) {
// fail-fast: цепь приняла action, но не вернула tx_hash — audit-trail
// станет фантомным ('unknown') без возможности cross-reference. Лучше
// отбить отмену пайщику и попросить retry, чем записать «unknown».
throw new BadRequestException(
'Отмена заказа: цепь не вернула tx_hash. Повторите попытку.'
);
}
return hash;
}
private rethrowChainError(error: any): never {
@@ -322,7 +322,14 @@ export class MarketplaceOrderCreateService {
private normalizeTxResult(tx: unknown): { tx_hash: string; block_num: number } {
const t = tx as { transaction?: { id?: string }; processed?: { id?: string; block_num?: number } };
const tx_hash = t?.transaction?.id ?? t?.processed?.id ?? 'unknown';
const tx_hash = t?.transaction?.id ?? t?.processed?.id;
if (!tx_hash) {
// fail-fast: цепь приняла createorder, но не вернула tx_hash —
// запись Order в БД без tx_hash сделает audit-trail фантомным.
throw new BadRequestException(
'Создание заказа: цепь не вернула tx_hash. Повторите попытку.'
);
}
const block_num = t?.processed?.block_num ?? 0;
return { tx_hash, block_num };
}
@@ -188,7 +188,16 @@ export class MarketplaceOrderSupplierActionService {
private normalizeTxHash(tx: unknown): string {
const t = tx as { transaction?: { id?: string }; processed?: { id?: string } };
return t?.transaction?.id ?? t?.processed?.id ?? 'unknown';
const hash = t?.transaction?.id ?? t?.processed?.id;
if (!hash) {
// fail-fast: цепь приняла action, но не вернула tx_hash —
// лучше отбить поставщику и попросить retry, чем записать
// 'unknown' в audit-trail.
throw new BadRequestException(
'Действие поставщика: цепь не вернула tx_hash. Повторите попытку.'
);
}
return hash;
}
private rethrowChainError(error: any): never {