namespace Deal.Modules.Tenants.Application.Models; /// /// Результат активации приглашения через /api/join; тексты HTTP-ошибок фиксирует слой эндпоинтов. /// /// true — пользователь создан, тенант (при необходимости) создан и приглашение активировано. /// Код ошибки (/// /// ) или null при успехе. /// Нормализованный email (логин пользователя) при Ok=true; иначе null. /// Идентификатор созданного пользователя при Ok=true (для аудита invite_activated); иначе null. /// Тенант пользователя при Ok=true (существующий из инвайта или созданный); иначе null. public sealed record JoinResultDto(bool Ok, string? Error, string? Login, Guid? UserId, Guid? TenantId) { /// /// Ошибка: приглашение с таким кодом не найдено /// public const string ErrorNotFound = "notFound"; /// /// Ошибка: срок действия приглашения истёк /// public const string ErrorExpired = "expired"; /// /// Ошибка: приглашение уже активировано /// public const string ErrorUsed = "used"; /// /// Ошибка: приглашение отозвано оператором. /// public const string ErrorRevoked = "revoked"; /// /// Ошибка: email запроса не совпадает с email приглашения. /// public const string ErrorEmailMismatch = "emailMismatch"; /// /// Ошибка: пользователь с таким email /// public const string ErrorEmailTaken = "emailTaken"; /// /// Ошибка: пароль пустой или короче символов. /// public const string ErrorPasswordTooShort = "passwordTooShort"; /// /// Ошибка: целевой тенант инвайта не существует /// public const string ErrorTenantNotFound = "tenantNotFound"; /// /// Ошибка: целевой тенант инвайта приостановлен /// public const string ErrorTenantSuspended = "tenantSuspended"; }