use std::sync::Arc;
use axum::{
routing::{delete, get, post},
Router,
};
use super::handlers;
use super::ServerState;
pub fn build_router(state: Arc<ServerState>) -> Router {
let api = Router::new()
.route("/sessions", get(handlers::get_sessions))
.route("/configurations", get(handlers::get_configurations))
.route("/nodes", get(handlers::get_nodes))
.route("/groups", get(handlers::get_groups))
.route("/images", get(handlers::get_images))
.route("/templates", get(handlers::get_templates))
.route("/boot-parameters", get(handlers::get_boot_parameters))
.route("/kernel-parameters", get(handlers::get_kernel_parameters))
.route("/redfish-endpoints", get(handlers::get_redfish_endpoints))
.route("/clusters", get(handlers::get_clusters))
.route("/hardware-clusters", get(handlers::get_hardware_clusters))
.route("/hardware-nodes", get(handlers::get_hardware_nodes))
.route("/nodes", post(handlers::add_node))
.route("/nodes/{id}", delete(handlers::delete_node))
.route("/groups", post(handlers::create_group))
.route("/groups/{label}", delete(handlers::delete_group))
.route(
"/groups/{name}/members",
post(handlers::add_nodes_to_group)
.delete(handlers::delete_group_members),
)
.route(
"/boot-parameters",
post(handlers::add_boot_parameters)
.put(handlers::update_boot_parameters)
.delete(handlers::delete_boot_parameters),
)
.route(
"/redfish-endpoints",
post(handlers::add_redfish_endpoint)
.put(handlers::update_redfish_endpoint),
)
.route(
"/redfish-endpoints/{id}",
delete(handlers::delete_redfish_endpoint),
)
.route("/sessions/{name}", delete(handlers::delete_session))
.route("/sessions", post(handlers::create_session))
.route("/images", delete(handlers::delete_images))
.route(
"/configurations",
delete(handlers::delete_configurations),
)
.route("/boot-config", post(handlers::apply_boot_config))
.route("/kernel-parameters/apply", post(handlers::apply_kernel_parameters))
.route("/kernel-parameters/add", post(handlers::add_kernel_parameters))
.route("/kernel-parameters", delete(handlers::delete_kernel_parameters))
.route("/migrate/nodes", post(handlers::migrate_nodes))
.route("/migrate/backup", post(handlers::migrate_backup))
.route("/migrate/restore", post(handlers::migrate_restore))
.route("/ephemeral-env", post(handlers::create_ephemeral_env))
.route("/power", post(handlers::post_power))
.route("/templates/{name}/sessions", post(handlers::post_template_session))
.route("/sessions/{name}/logs", get(handlers::get_session_logs))
.route("/sat-file", post(handlers::post_sat_file))
.route("/health", get(handlers::health))
.route(
"/hardware-clusters/{target}/members",
post(handlers::add_hw_component)
.delete(handlers::delete_hw_component),
)
.route(
"/hardware-clusters/{target}/configuration",
post(handlers::apply_hw_configuration),
)
.route("/sessions/apply", post(handlers::apply_session))
.merge(build_ws_routes());
Router::new().nest("/api/v1", api).with_state(state)
}
fn build_ws_routes() -> Router<Arc<ServerState>> {
Router::new()
.route("/nodes/{xname}/console", get(handlers::console_node_ws))
.route("/sessions/{name}/console", get(handlers::console_session_ws))
}