Вынести условия-предикаты в extension-методы

HasUser из 13 endpoint-файлов сведён в AuthHelpers.HasUser;
15 приватных предикатов заменены extension-методами с удалением
дублирующих приватных методов: IsCommunicationFailure,
IsTransportFailure, IsPrivateEndpoint, IsConfigured, IsTrue,
IsExpired, IsFailedLogin/IsSuccessfulLogin, HasChanges, HasBudget,
HasAnyTerm, IsCurrencyLetter, IsEmojiCodePoint, ContainsFooterHint,
IsTypeLabel.
This commit is contained in:
Rustam Khalimov
2026-09-11 13:08:47 +03:00
parent 9e07568ddd
commit 413eaac48c
40 changed files with 1091 additions and 993 deletions
@@ -0,0 +1,21 @@
using System.IO;
using System.Net.Http;
using Grpc.Core;
namespace Deal.Telegram.Telegram;
/// <summary>
/// Расширения <see cref="Exception"/> для классификации сбоев telegram-service.
/// </summary>
internal static class ExceptionExtensions
{
/// <summary>
/// Истинно транспортные/сетевые причины — только они дают UNAVAILABLE (безопасный повтор).
/// </summary>
/// <param name="exception">Исключение для классификации.</param>
/// <returns>True — исключение транспортного/сетевого характера.</returns>
public static bool IsTransportFailure(this Exception exception)
{
return exception is HttpRequestException or IOException or TimeoutException or RpcException;
}
}
@@ -522,15 +522,10 @@ public sealed class TelegramServiceImpl : TelegramService.TelegramServiceBase
// UNAVAILABLE (замечание code-review): внутренние дефекты должны быть видны как Internal.
// exception: Необработанное исключение операции.
private static SessionException ToSessionFailure(Exception exception)
=> IsTransportFailure(exception)
=> exception.IsTransportFailure()
? new SessionException(StatusCode.Unavailable, SessionErrorMessages.TelegramUnavailable, exception)
: new SessionException(StatusCode.Internal, SessionErrorMessages.InternalError, exception);
// Истинно транспортные/сетевые причины — только они дают UNAVAILABLE (безопасный повтор).
// exception: Исключение для классификации.
private static bool IsTransportFailure(Exception exception)
=> exception is HttpRequestException or IOException or TimeoutException or RpcException;
// Фаза AuthPhase → строка канона контракта (idle|phone|code|password|qr|ready).
// phase: Фаза сессии.
private static string PhaseToString(AuthPhase phase)