use utoipa::OpenApi;
use crate::api::dto::{CancelResponse, CreateJobRequest, ErrorBody, HealthResponse, JobResponse};
use crate::api::routes;
use crate::domain::{JobKind, JobStatus};
use crate::ids::JobId;
#[derive(OpenApi)]
#[openapi(
info(
title = "Rust Job Queue API",
description = "Production-shaped job queue with Postgres SKIP LOCKED dequeue, retries, idempotency, cooperative cancellation, and Prometheus metrics.",
version = "0.1.0",
license(name = "Apache-2.0"),
),
paths(
routes::jobs::create_job,
routes::jobs::get_job,
routes::jobs::list_jobs,
routes::jobs::cancel_job,
routes::health::health,
routes::metrics::metrics,
),
components(schemas(
CreateJobRequest,
JobResponse,
CancelResponse,
HealthResponse,
ErrorBody,
JobKind,
JobStatus,
JobId,
)),
tags(
(name = "jobs", description = "Create, fetch, list, and cancel jobs"),
(name = "ops", description = "Operational endpoints: health, metrics"),
),
)]
pub struct ApiDoc;