Вынести условия-предикаты в 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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user