use anyhow::Result; use axum::{extract::Query, response::IntoResponse}; use minijinja::context as template_context; use serde::Deserialize; use crate::{ contextual_error, create_renderer, http::{context::AdminRequestContext, errors::WebError}, storage::event::event_get, }; #[derive(Deserialize)] pub struct EventRecordQuery { pub aturi: String, } pub async fn handle_admin_event( admin_ctx: AdminRequestContext, Query(query): Query, ) -> Result { let language = admin_ctx.language; let web_context = admin_ctx.web_context; let canonical_url = format!("https://{}/admin/event", web_context.config.external_base); // Create the template renderer with enhanced context let renderer = create_renderer!(web_context.clone(), language, false, false); // Get the event record by AT-URI let event = event_get(&web_context.pool, &query.aturi).await; if let Err(err) = event { return contextual_error!(renderer: renderer, err, template_context!{ aturi => query.aturi.clone() }); } let event = event.unwrap(); // Also provide the full event object as JSON let event_json = serde_json::to_string_pretty(&event) .unwrap_or_else(|_| "Error formatting JSON".to_string()); Ok(renderer.render_template( "admin_event", template_context! { aturi => query.aturi.clone(), event => event, event_json => event_json, }, Some(&admin_ctx.admin_handle), &canonical_url, )) }