Базовые типы API

Документ Версия: 0.1 draft

Маркерные базовые классы команд/запросов и единая обёртка результата (payload / успех / ошибки), общая для всех ручек. Соответствует коду IcdBaseRequestResult (ADR-SRV-001).

⟨/⟩ Исходник

1. Единая обёртка ответа

Все ручки возвращают один контракт: успех — это отсутствие ошибок; полезная нагрузка кладётся в поле Payload конкретного результата-наследника. Соответствие в коде — IcdBaseRequestResult (см. ADR_SRV_001_Cqrs).

2. BasedCommand

/// <summary>Маркер команды (write-сторона).</summary>
public class BasedCommand
{
}

3. BasedQuery

/// <summary>Маркер запроса (read-сторона).</summary>
public class BasedQuery
{
}

4. BasedResult

/// <summary>Единая обёртка результата: полезная нагрузка — в поле `Payload` наследника.</summary>
public class BasedResult
{
    /// <summary>Идентификатор запроса для трассировки (резерв).</summary>
    public Guid? RequestId { get; init; }

    /// <summary>HTTP-код операции.</summary>
    public int StatusCode { get; init; } = 200;

    /// <summary>Сопроводительное сообщение.</summary>
    public string? Message { get; init; }

    /// <summary>Детализация ошибок; пусто — успех.</summary>
    public ErrorDetail[] Errors { get; init; } = new ErrorDetail[0];

    /// <summary>Успех операции: ошибок нет.</summary>
    public bool IsSuccess => Errors.Length == 0;
}

5. ErrorDetail

/// <summary>Одна ошибка ответа. Текст формирует бэкенд (по-русски); UI его не переводит.</summary>
public class ErrorDetail
{
    /// <summary>Поле или контекст ошибки.</summary>
    public string? ErrorData { get; init; }

    /// <summary>Код ошибки.</summary>
    public ErrorCode ErrorCode { get; init; }

    /// <summary>Человекочитаемый текст.</summary>
    public string? ErrorMessage { get; init; }
}

6. ErrorCode

/// <summary>Код ошибки операции.</summary>
public enum ErrorCode
{
    Unknown,
    Validation,
    NotFound,
    Conflict,
}

Связанные артефакты

Документы