use axum::{extract::{State, Path, Query}, Json};
use lmrc_http_common::{HttpResult, SuccessResponse};
use serde::Deserialize;
use crate::{state::AppState, error::AppError};
use super::{service::KubernetesService, models::*};
#[derive(Deserialize)]
pub struct NamespaceQuery {
namespace: Option<String>,
}
pub async fn list_nodes(
State(_state): State<AppState>,
Path(cluster_id): Path<i64>,
) -> HttpResult<Json<SuccessResponse<NodesListResponse>>> {
tracing::info!("Listing nodes for cluster {}", cluster_id);
let mut service = KubernetesService::new();
let nodes = service.list_nodes().await?;
Ok(Json(SuccessResponse::new(nodes)))
}
pub async fn list_pods(
State(_state): State<AppState>,
Path(cluster_id): Path<i64>,
Query(query): Query<NamespaceQuery>,
) -> HttpResult<Json<SuccessResponse<PodsListResponse>>> {
tracing::info!("Listing pods for cluster {}", cluster_id);
let mut service = KubernetesService::new();
let pods = service.list_pods(query.namespace).await?;
Ok(Json(SuccessResponse::new(pods)))
}
pub async fn list_services(
State(_state): State<AppState>,
Path(cluster_id): Path<i64>,
Query(query): Query<NamespaceQuery>,
) -> HttpResult<Json<SuccessResponse<ServicesListResponse>>> {
tracing::info!("Listing services for cluster {}", cluster_id);
let mut service = KubernetesService::new();
let services = service.list_services(query.namespace).await?;
Ok(Json(SuccessResponse::new(services)))
}
pub async fn list_deployments(
State(_state): State<AppState>,
Path(cluster_id): Path<i64>,
Query(query): Query<NamespaceQuery>,
) -> HttpResult<Json<SuccessResponse<DeploymentsListResponse>>> {
tracing::info!("Listing deployments for cluster {}", cluster_id);
let mut service = KubernetesService::new();
let deployments = service.list_deployments(query.namespace).await?;
Ok(Json(SuccessResponse::new(deployments)))
}