omni_orchestrator/schemas/v1/api/
workers.rs

1//! Worker management module for the OmniOrchestrator API
2//! 
3//! This module provides a REST API for managing workers, including:
4//! - Listing workers
5//! - Creating new workers
6//! - Updating existing workers
7//! - Getting worker details and statistics
8//! - Starting and stopping workers
9//! - Scaling workers
10//! - Deleting workers
11
12use crate::models::worker::Worker;
13use super::super::db::queries as db;
14use rocket::http::Status;
15use rocket::serde::json::{json, Json, Value};
16use rocket::{delete, get, http::ContentType, post, put, Data, State};
17use serde::{Deserialize, Serialize};
18use sqlx::MySql;
19use std::collections::HashMap;
20use std::sync::Arc;
21use tokio::sync::RwLock;
22
23/// List all workers with pagination support.
24#[get("/workers?<page>&<per_page>")]
25pub async fn list_workers(
26    page: Option<u64>,
27    per_page: Option<u64>,
28    pool: &State<sqlx::Pool<MySql>>,
29) -> Result<Json<Vec<Worker>>, Status> {
30    let workers = db::worker::list_workers(pool, page, per_page).await.map_err(|_| Status::InternalServerError)?;
31    Ok(Json(workers))
32}
33
34/// Get a worker by its ID.
35#[get("/workers/<worker_id>")]
36pub async fn get_worker_by_id(
37    worker_id: i64,
38    pool: &State<sqlx::Pool<MySql>>,
39) -> Result<Json<Worker>, Status> {
40    let worker = db::worker::get_worker_by_id(pool, worker_id).await.map_err(|_| Status::NotFound)?;
41    Ok(Json(worker))
42}