omni_orchestrator/schemas/v1/api/
platforms.rs

1use crate::schemas::v1::models::platform::Platform;
2use crate::db_manager::{self, DatabaseManager};
3use rocket::{get, post, delete};
4use rocket::serde::json::Json;
5use rocket::http::Status;
6use std::sync::Arc;
7use rocket::State;
8use log::{info, error}; // Add logging
9
10#[get("/platforms")]
11pub async fn list_platforms(db_manager: &State<Arc<DatabaseManager>>) -> Json<Vec<Platform>> {
12    info!("Listing all platforms");
13    let platforms = db_manager.get_all_platforms().await.unwrap_or_default();
14    Json(platforms)
15}
16
17#[post("/platforms", data = "<platform_data>")]
18pub async fn add_platform(
19    platform_data: Json<Platform>,
20    db_manager: &State<Arc<DatabaseManager>>
21) -> Status {
22    info!("Adding new platform: {:?}", platform_data.name);
23
24    // Make a mutable copy to modify fields
25    let mut platform = platform_data.into_inner();
26    if platform.table_name.is_none() {
27        platform.table_name = Some(format!("omni_p_{}", platform.name));
28    }
29    if platform.subdomain.is_none() {
30        platform.subdomain = Some(platform.name.clone());
31    }
32
33    info!("Platform Data: {:?}", platform);
34
35    match db_manager.create_platform(
36        db_manager,
37        platform.clone()
38    ).await {
39        Ok(platform_id) => {
40            info!("Platform created with id: {}", platform_id);
41            if let Err(_e) = db_manager.get_platform_pool(&platform.name, platform_id).await {
42                error!("Failed to initialize connection pool for platform: {}", platform.name);
43                return Status::InternalServerError;
44            }
45            Status::Created
46        }
47        Err(e) => {
48            error!("Failed to create platform: {:?}", e);
49            Status::InternalServerError
50        }
51    }
52}
53
54#[delete("/platforms/<platform_id>")]
55pub async fn remove_platform(
56    platform_id: i64,
57    db_manager: &State<Arc<DatabaseManager>>
58) -> Status {
59    info!("Removing platform with id: {}", platform_id);
60    match db_manager.delete_platform(platform_id).await {
61        Ok(_) => {
62            info!("Platform {} removed successfully", platform_id);
63            Status::NoContent
64        },
65        Err(e) => {
66            error!("Failed to remove platform {}: {:?}", platform_id, e);
67            Status::InternalServerError
68        }
69    }
70}