Deal — единая кодовая база
ci / build-test (push) Canceled after 0s

SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/
Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue,
контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер),
Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог).

Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0,
тесты 1340/130/52/38/9 зелёные.
This commit is contained in:
Rustam Khalimov
2026-09-11 23:56:47 +03:00
commit 27c7831910
1383 changed files with 158436 additions and 0 deletions
@@ -0,0 +1,44 @@
namespace Deal.Modules.Tenants.Application.Models;
/// <summary>
/// Результат impersonation.
/// </summary>
/// <param name="Ok">true — сессия impersonation создана.</param>
/// <param name="Error">Код ошибки при Ok=false (см. константы); null при успехе.</param>
/// <param name="SessionToken">Raw-токен tenant-сессии (значение куки deal_session); null при Ok=false.</param>
/// <param name="ExpiresAt">Момент истечения сессии (30 дней от создания, как у обычного входа).</param>
/// <param name="Login">Логин пользователя, под которым выполнен вход; null при Ok=false.</param>
/// <param name="UserId">Идентификатор пользователя (для аудита); null при Ok=false.</param>
/// <param name="TenantId">Тенант пользователя; null при Ok=false.</param>
public sealed record ImpersonationResultDto(
bool Ok,
string? Error,
string? SessionToken,
DateTimeOffset? ExpiresAt,
string? Login,
Guid? UserId,
Guid? TenantId)
{
/// <summary>
/// Код ошибки: тенант не найден
/// </summary>
public const string ErrorTenantNotFound = "tenant_not_found";
/// <summary>
/// Код ошибки: в тенанте нет пользователей, а login не указан
/// </summary>
public const string ErrorTenantHasNoUsers = "tenant_has_no_users";
/// <summary>
/// Код ошибки: пользователь с таким login не найден в тенанте
/// </summary>
public const string ErrorUserNotFound = "user_not_found";
/// <summary>
/// Неуспешный результат без полезной нагрузки.
/// </summary>
/// <param name="error">Код ошибки (см. константы).</param>
/// <returns>ImpersonationResultDto с Ok=false.</returns>
public static ImpersonationResultDto Failed(string error) =>
new(Ok: false, Error: error, SessionToken: null, ExpiresAt: null, Login: null, UserId: null, TenantId: null);
}