omni_orchestrator/schemas/v1/api/
platforms.rs1use 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}; #[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 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}