use actix_web::{web, Result, Responder}; use tera::Tera; use crate::utils::render_template; use crate::config::get_app_config; use actix_session::Session; /// Controller for handling documentation-related routes pub struct DocsController; impl DocsController { /// Renders the documentation index/overview page pub async fn index(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "overview"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user to context if available if let Ok(Some(user_json)) = session.get::("user") { // Keep the raw JSON for backward compatibility ctx.insert("user_json", &user_json); // Parse the JSON into a User object match serde_json::from_str::(&user_json) { Ok(user) => { ctx.insert("user", &user); }, Err(e) => { } } } render_template(&tmpl, "docs/index.html", &ctx) } /// Renders the getting started documentation page pub async fn getting_started(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "getting_started"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/getting_started.html", &ctx) } /// Renders the Mycelium Nodes documentation page pub async fn mycelium_nodes(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "mycelium_nodes"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/mycelium_nodes.html", &ctx) } /// Renders the compute resources documentation page pub async fn compute(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "compute"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/compute.html", &ctx) } /// Renders the gateways documentation page pub async fn gateways(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "gateways"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/gateways.html", &ctx) } /// Renders the applications documentation page pub async fn applications(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "applications"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/applications.html", &ctx) } /// Renders the services documentation page pub async fn services(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "services"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/services.html", &ctx) } /// Mycelium Credits documentation page pub async fn credits(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "credits"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/credits.html", &ctx) } /// Renders the slices documentation page pub async fn slices(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "slices"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/slices.html", &ctx) } /// Renders the certification documentation page pub async fn certification(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "certification"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/certification.html", &ctx) } /// Renders the API documentation page pub async fn api(tmpl: web::Data, session: Session) -> Result { let mut ctx = crate::models::builders::ContextBuilder::new() .active_page("docs") .build(); ctx.insert("active_section", "api"); let config = get_app_config(); ctx.insert("gitea_enabled", &config.is_gitea_enabled()); // Add user data to context if let Ok(Some(user_json)) = session.get::("user") { ctx.insert("user_json", &user_json); if let Ok(user) = serde_json::from_str::(&user_json) { ctx.insert("user", &user); } } render_template(&tmpl, "docs/api.html", &ctx) } }