namespace Deal.Modules.Tenants.Application.Models; /// /// Результат impersonation. /// /// true — сессия impersonation создана. /// Код ошибки при Ok=false (см. константы); null при успехе. /// Raw-токен tenant-сессии (значение куки deal_session); null при Ok=false. /// Момент истечения сессии (30 дней от создания, как у обычного входа). /// Логин пользователя, под которым выполнен вход; null при Ok=false. /// Идентификатор пользователя (для аудита); null при Ok=false. /// Тенант пользователя; null при Ok=false. public sealed record ImpersonationResultDto( bool Ok, string? Error, string? SessionToken, DateTimeOffset? ExpiresAt, string? Login, Guid? UserId, Guid? TenantId) { /// /// Код ошибки: тенант не найден /// public const string ErrorTenantNotFound = "tenant_not_found"; /// /// Код ошибки: в тенанте нет пользователей, а login не указан /// public const string ErrorTenantHasNoUsers = "tenant_has_no_users"; /// /// Код ошибки: пользователь с таким login не найден в тенанте /// public const string ErrorUserNotFound = "user_not_found"; /// /// Неуспешный результат без полезной нагрузки. /// /// Код ошибки (см. константы). /// ImpersonationResultDto с Ok=false. public static ImpersonationResultDto Failed(string error) => new(Ok: false, Error: error, SessionToken: null, ExpiresAt: null, Login: null, UserId: null, TenantId: null); }