omni_orchestrator/schemas/v1/api/deployments/
update.rs

1use std::sync::Arc;
2use crate::DatabaseManager;
3use super::super::super::db::queries as db;
4use super::types::UpdateDeploymentStatusRequest;
5use rocket::http::Status;
6use rocket::serde::json::{json, Json, Value};
7use rocket::{put, State};
8
9use libomni::types::db::v1 as types;
10use types::deployment::Deployment;
11
12/// Update a deployment's status.
13#[put("/platform/<platform_id>/deployments/<deployment_id>/status", format = "json", data = "<status_request>")]
14pub async fn update_deployment_status(
15    platform_id: i64,
16    deployment_id: i64,
17    status_request: Json<UpdateDeploymentStatusRequest>,
18    db_manager: &State<Arc<DatabaseManager>>,
19) -> Result<Json<Deployment>, (Status, Json<Value>)> {
20    // Get platform information
21    let platform = match db::platforms::get_platform_by_id(db_manager.get_main_pool(), platform_id).await {
22        Ok(platform) => platform,
23        Err(_) => {
24            return Err((
25                Status::NotFound,
26                Json(json!({
27                    "error": "Platform not found",
28                    "message": format!("Platform with ID {} does not exist", platform_id)
29                }))
30            ));
31        }
32    };
33
34    // Get platform-specific database pool
35    let pool = match db_manager.get_platform_pool(&platform.name, platform_id).await {
36        Ok(pool) => pool,
37        Err(_) => {
38            return Err((
39                Status::InternalServerError,
40                Json(json!({
41                    "error": "Database error",
42                    "message": "Failed to connect to platform database"
43                }))
44            ));
45        }
46    };
47
48    match db::deployment::update_deployment_status(
49        &pool,
50        deployment_id,
51        &status_request.status,
52        status_request.error_message.as_deref(),
53    ).await {
54        Ok(deployment) => Ok(Json(deployment)),
55        Err(e) => Err((
56            Status::InternalServerError,
57            Json(json!({
58                "error": "Failed to update deployment status",
59                "message": e.to_string()
60            }))
61        )),
62    }
63}