61 lines
1.8 KiB
Rust
61 lines
1.8 KiB
Rust
pub mod item;
|
|
pub mod status;
|
|
|
|
use axum::{
|
|
routing::get,
|
|
Router,
|
|
};
|
|
|
|
use crate::modes::server::common::AppState;
|
|
use utoipa::OpenApi;
|
|
use utoipa_swagger_ui::SwaggerUi;
|
|
|
|
#[derive(OpenApi)]
|
|
#[openapi(
|
|
paths(
|
|
status::handle_status,
|
|
item::handle_list_items,
|
|
item::handle_post_item,
|
|
item::handle_delete_item,
|
|
item::handle_get_item_latest,
|
|
item::handle_get_item_latest_meta,
|
|
item::handle_get_item_latest_content,
|
|
item::handle_get_item,
|
|
item::handle_get_item_meta,
|
|
item::handle_get_item_content,
|
|
),
|
|
components(
|
|
schemas(
|
|
crate::common::status::StatusInfo,
|
|
crate::modes::server::common::ItemInfo,
|
|
)
|
|
),
|
|
tags(
|
|
(name = "status", description = "Status API endpoints"),
|
|
(name = "items", description = "Item management API endpoints")
|
|
)
|
|
)]
|
|
struct ApiDoc;
|
|
|
|
pub fn add_routes(router: Router<AppState>) -> Router<AppState> {
|
|
router
|
|
// Status endpoints
|
|
.route("/api/status", get(status::handle_status))
|
|
|
|
// Item endpoints
|
|
.route("/api/item/", get(item::handle_list_items).post(item::handle_post_item))
|
|
.route("/api/item/latest", get(item::handle_get_item_latest))
|
|
.route("/api/item/latest/meta", get(item::handle_get_item_latest_meta))
|
|
.route("/api/item/latest/content", get(item::handle_get_item_latest_content))
|
|
.route("/api/item/:id", get(item::handle_get_item).delete(item::handle_delete_item))
|
|
.route("/api/item/:id/meta", get(item::handle_get_item_meta))
|
|
.route("/api/item/:id/content", get(item::handle_get_item_content))
|
|
}
|
|
|
|
pub fn add_docs_routes(router: Router<AppState>) -> Router<AppState> {
|
|
router
|
|
.merge(SwaggerUi::new("/swagger-ui")
|
|
.url("/api-docs/openapi.json", ApiDoc::openapi())
|
|
.into())
|
|
}
|