Files
Deal/src/core/Deal.Modules.Tenants/Application/Models/JoinResultDto.cs
T
Rustam Khalimov 27c7831910
ci / build-test (push) Canceled after 0s
Deal — единая кодовая база
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 зелёные.
2026-09-11 23:56:47 +03:00

58 lines
2.9 KiB
C#

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