use axum::{
extract::State,
Json,
};
use lmrc_http_common::{HttpResult, SuccessResponse};
use crate::state::AppState;
use super::service::HetznerService;
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)))
}
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)))
}
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)))
}
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)))
}