mod handlers;
mod models;
use actix_web::{web, App, HttpServer};
use std::env;
use tracing::info;
pub async fn start_api_server() -> std::io::Result<()> {
let port = env::var("PORT_XBP_API")
.unwrap_or_else(|_| "8080".to_string())
.parse::<u16>()
.unwrap_or(8080);
info!("Starting XBP API server on port {}", port);
HttpServer::new(|| {
App::new()
.route("/ports", web::get().to(handlers::list_ports))
.route("/ports/{port}", web::get().to(handlers::get_port))
.route("/ports/{port}/kill", web::post().to(handlers::kill_port))
.route("/systemctl", web::get().to(handlers::list_systemctl))
.route(
"/systemctl/{service}",
web::get().to(handlers::get_systemctl_service),
)
.route("/pm2", web::get().to(handlers::list_pm2))
.route("/pm2/{name}", web::delete().to(handlers::delete_pm2))
.route("/pm2/{name}/start", web::post().to(handlers::start_pm2))
.route("/pm2/{name}/stop", web::post().to(handlers::stop_pm2))
.route("/pm2/{name}/restart", web::post().to(handlers::restart_pm2))
.route("/services", web::get().to(handlers::list_services))
.route(
"/services/{name}/{command}",
web::post().to(handlers::run_service_command),
)
.route("/config", web::get().to(handlers::get_config))
.route("/logs", web::get().to(handlers::get_logs))
.route(
"/install/{package}",
web::post().to(handlers::install_package),
)
.route("/setup", web::post().to(handlers::setup))
.route("/redeploy", web::post().to(handlers::redeploy))
.route(
"/redeploy/{service_name}",
web::post().to(handlers::redeploy_service),
)
.route(
"/binary/download",
web::post().to(handlers::download_and_run_binary),
)
.route(
"/openapi/download",
web::get().to(handlers::download_openapi),
)
.route("/health", web::get().to(handlers::health))
})
.bind(("0.0.0.0", port))?
.run()
.await
}