Вынести условия-предикаты в 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
@@ -56,7 +56,7 @@ public sealed partial class InvitesService(IInviteStore inviteStore)
var active = await inviteStore.FindActiveByEmailAsync(normalizedEmail, ct);
if (active is not null)
{
if (IsExpired(active))
if (active.IsExpired())
{
await inviteStore.UpdateStatusAsync(active.Code, InviteStatuses.Expired, null, ct);
}
@@ -143,7 +143,7 @@ public sealed partial class InvitesService(IInviteStore inviteStore)
public async Task<InviteDto?> GetByCodeAsync(string code, CancellationToken ct)
{
var invite = await inviteStore.GetByCodeAsync(code, ct);
if (invite is null || invite.Status != InviteStatuses.Pending || !IsExpired(invite))
if (invite is null || invite.Status != InviteStatuses.Pending || !invite.IsExpired())
{
return invite;
}
@@ -183,9 +183,4 @@ public sealed partial class InvitesService(IInviteStore inviteStore)
&& normalized.Length <= MaxEmailLength
&& EmailFormatRegex().IsMatch(normalized);
}
// Истекло ли приглашение (сравнение по UTC-now; действует только для статуса pending).
// invite: Приглашение.
// Возвращает: true, если срок действия уже прошёл.
private static bool IsExpired(InviteDto invite) => invite.ExpiresAt <= DateTimeOffset.UtcNow;
}