Почистить комментарии от ссылок на ТЗ и обрывков
Удаление целых //-блоков со ссылками (Task/Ruling/этап/ТЗ/§/ дизайн-док/api-map/python/прототип) вместо построчного вырезания — без обрывков фраз; снят боилерплейт <param>/<returns>; то же в .proto.
This commit is contained in:
@@ -30,7 +30,6 @@ public sealed class AuditService(IAuditLogStore store)
|
||||
public async Task AppendAsync(AuditRecordDto record, CancellationToken ct)
|
||||
{
|
||||
await store.AppendAsync(record with { At = DateTimeOffset.UtcNow }, ct);
|
||||
// (низкокардинальные метки — без tenantId/actorId).
|
||||
DealMetrics.RecordAuditEvent(record.EventType, record.ActorType);
|
||||
}
|
||||
|
||||
|
||||
@@ -123,7 +123,6 @@ public sealed class AuthService(
|
||||
return new ChangePasswordResultDto(Ok: false, Error: ChangePasswordResultDto.ErrorTooShort, NewToken: null);
|
||||
}
|
||||
|
||||
// сессии, обновляем хэш и выдаём свежую — её raw-токен вернёт HTTP-слой в куке.
|
||||
await authStore.DeleteSessionsByUserIdAsync(user.Id, ct);
|
||||
await authStore.UpdatePasswordHashAsync(user.Id, passwordHasher.Hash(newPassword), ct);
|
||||
var token = await CreateSessionForUserAsync(user.Id, user.Login, impersonatedByOperatorId: null, ct);
|
||||
@@ -202,9 +201,6 @@ public sealed class AuthService(
|
||||
|
||||
if (user is not null)
|
||||
{
|
||||
// каждом разрешении сессии, поэтому активные сессии suspended-тенанта перестают работать
|
||||
// храним: при resume доступ возвращается тем же путём (login не блокирует активные сессии).
|
||||
// Касается и impersonation-сессий (та же tenant-сессия с маркером оператора).
|
||||
var tenant = await tenantRepository.FindByIdAsync(user.TenantId, ct);
|
||||
if (tenant is not null && tenant.Status == TenantStatuses.Suspended)
|
||||
{
|
||||
|
||||
@@ -43,9 +43,6 @@ public sealed partial class InvitesService(IInviteStore inviteStore)
|
||||
return new InviteCreateResultDto(Ok: false, Error: InviteCreateResultDto.ErrorInvalidEmail, Invite: null);
|
||||
}
|
||||
|
||||
// pending уже истекло (статус ещё не переведён), сначала помечаем expired — иначе partial unique-индекс
|
||||
// по pending не пустит новую строку; затем создаём новое приглашение. Отозванный/активированный/
|
||||
// истёкший email свободен (глобальную уникальность регистрации держит unique-индекс users.Login).
|
||||
var active = await inviteStore.FindActiveByEmailAsync(normalizedEmail, ct);
|
||||
if (active is not null)
|
||||
{
|
||||
|
||||
@@ -34,7 +34,6 @@ public sealed class JoinService(
|
||||
string normalizedEmail = InvitesService.NormalizeEmail(email);
|
||||
string normalizedCode = code?.Trim() ?? string.Empty;
|
||||
|
||||
// поэтому вернувшийся pending гарантированно не истёк; отдельная проверка кода не нужна — отвечает статус.
|
||||
var invite = await invitesService.GetByCodeAsync(normalizedCode, ct);
|
||||
if (invite is null)
|
||||
{
|
||||
@@ -57,7 +56,6 @@ public sealed class JoinService(
|
||||
return Failed(JoinResultDto.ErrorPasswordTooShort);
|
||||
}
|
||||
|
||||
// email не создавал тенанта и не расходовал инвайт (остаётся pending — оператор видит/отзывает его).
|
||||
var existingUser = await authStore.FindUserByLoginAsync(normalizedEmail, ct);
|
||||
if (existingUser is not null)
|
||||
{
|
||||
|
||||
@@ -74,8 +74,6 @@ public sealed class OperatorAuthService(IOperatorAuthStore operatorAuthStore, IP
|
||||
OperatorIdentityDto? operatorIdentity = null;
|
||||
if (session is not null && session.ExpiresAt > DateTimeOffset.UtcNow)
|
||||
{
|
||||
// Оператора ищем по денормализованному в сессию логину: он уникален и не меняется.
|
||||
// или приостановленный оператор при живой сессии получает null — 401 на HTTP-слое.
|
||||
var operatorRecord = await operatorAuthStore.FindByLoginAsync(session.Login, ct);
|
||||
if (operatorRecord is not null && operatorRecord.Status == ActiveStatus)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user