Базовые типы API
Маркерные базовые классы команд/запросов и единая обёртка результата (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,
}