Почистить комментарии от ссылок на ТЗ и обрывков

Удаление целых //-блоков со ссылками (Task/Ruling/этап/ТЗ/§/
дизайн-док/api-map/python/прототип) вместо построчного вырезания —
без обрывков фраз; снят боилерплейт <param>/<returns>; то же в
.proto.
This commit is contained in:
Rustam Khalimov
2026-09-11 13:49:26 +03:00
parent b053d58335
commit 79c931d88e
220 changed files with 32 additions and 1259 deletions
@@ -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)
{