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