lmrc-cli 0.3.16

CLI tool for scaffolding LMRC Stack infrastructure projects
Documentation
//! HTTP handlers for Hetzner resources endpoints

use axum::{
    extract::State,
    Json,
};
use lmrc_http_common::{HttpResult, SuccessResponse};
use crate::state::AppState;
use super::service::HetznerService;

/// GET /api/hetzner/servers
/// List all servers in Hetzner account
pub async fn list_servers(
    State(state): State<AppState>,
) -> HttpResult<Json<SuccessResponse<super::models::ServersListResponse>>> {
    tracing::info!("Listing Hetzner servers");

    let service = HetznerService::new(state.config.hetzner_api_token.clone())?;
    let servers = service.list_servers().await?;

    Ok(Json(SuccessResponse::new(servers)))
}

/// GET /api/hetzner/networks
/// List all private networks
pub async fn list_networks(
    State(state): State<AppState>,
) -> HttpResult<Json<SuccessResponse<super::models::NetworksListResponse>>> {
    tracing::info!("Listing Hetzner networks");

    let service = HetznerService::new(state.config.hetzner_api_token.clone())?;
    let networks = service.list_networks().await?;

    Ok(Json(SuccessResponse::new(networks)))
}

/// GET /api/hetzner/load-balancers
/// List all load balancers
pub async fn list_load_balancers(
    State(state): State<AppState>,
) -> HttpResult<Json<SuccessResponse<super::models::LoadBalancersListResponse>>> {
    tracing::info!("Listing Hetzner load balancers");

    let service = HetznerService::new(state.config.hetzner_api_token.clone())?;
    let load_balancers = service.list_load_balancers().await?;

    Ok(Json(SuccessResponse::new(load_balancers)))
}

/// GET /api/hetzner/firewalls
/// List all firewalls
pub async fn list_firewalls(
    State(state): State<AppState>,
) -> HttpResult<Json<SuccessResponse<super::models::FirewallsListResponse>>> {
    tracing::info!("Listing Hetzner firewalls");

    let service = HetznerService::new(state.config.hetzner_api_token.clone())?;
    let firewalls = service.list_firewalls().await?;

    Ok(Json(SuccessResponse::new(firewalls)))
}