using Deal.Api.Services;
using Deal.Api.Dtos;
namespace Deal.Api.Http;
///
/// Общие ответы ошибок минимальных API: HTTP-код + {"detail":"…"} (формат прототипа, Ruling 10).
///
///
/// Единая точка для всех Endpoints-файлов (Auth/Settings/Ai-проверка): сообщения деталей —
/// фиксированные строки прототипа (FastAPI HTTPException), задаются вызывающим.
///
public static class EndpointResults
{
///
/// 401-ответ: сессия не разрешена/учётные данные не приняты.
///
/// Текст ошибки (напр. ).
/// JSON-ответ {detail} со статусом 401.
public static IResult Unauthorized(string detail) =>
Results.Json(new { detail }, statusCode: StatusCodes.Status401Unauthorized);
///
/// 400-ответ: некорректный запрос (тело/значения).
///
/// Текст ошибки.
/// JSON-ответ {detail} со статусом 400.
public static IResult BadRequest(string detail) =>
Results.Json(new { detail }, statusCode: StatusCodes.Status400BadRequest);
///
/// 404-ответ: ресурс не найден (формат прототипа, Ruling 10).
///
/// Текст ошибки.
/// JSON-ответ {detail} со статусом 404.
public static IResult NotFound(string detail) =>
Results.Json(new { detail }, statusCode: StatusCodes.Status404NotFound);
///
/// 403-ответ: запрос понятен, но доступ запрещён (приостановленный тенант, план Task 7/Ruling 10(5)).
///
/// Текст ошибки.
/// JSON-ответ {detail} со статусом 403.
public static IResult Forbidden(string detail) =>
Results.Json(new { detail }, statusCode: StatusCodes.Status403Forbidden);
///
/// 429-ответ: превышен лимит запросов/попыток входа (план Task 11, Ruling 5: LoginAttemptGuard).
///
/// Текст ошибки.
/// JSON-ответ {detail} со статусом 429.
public static IResult TooManyRequests(string detail) =>
Results.Json(new { detail }, statusCode: StatusCodes.Status429TooManyRequests);
///
/// 410-ответ: ресурс больше недоступен (Ruling 4: файл без objectKey — «Файл не сохранён
/// в объектном хранилище»; api-map §1: 410 в списке кодов ошибок прототипа).
///
/// Текст ошибки.
/// JSON-ответ {detail} со статусом 410.
public static IResult Gone(string detail) =>
Results.Json(new { detail }, statusCode: StatusCodes.Status410Gone);
}