i18n+filtering fork - fluent-templates v2
at main 50 lines 1.6 kB view raw
1use anyhow::Result; 2use axum::{extract::Query, response::IntoResponse}; 3use minijinja::context as template_context; 4use serde::Deserialize; 5 6use crate::{ 7 contextual_error, create_renderer, 8 http::{context::AdminRequestContext, errors::WebError}, 9 storage::event::event_get, 10}; 11 12#[derive(Deserialize)] 13pub struct EventRecordQuery { 14 pub aturi: String, 15} 16 17pub async fn handle_admin_event( 18 admin_ctx: AdminRequestContext, 19 Query(query): Query<EventRecordQuery>, 20) -> Result<impl IntoResponse, WebError> { 21 let language = admin_ctx.language; 22 let web_context = admin_ctx.web_context; 23 24 let canonical_url = format!("https://{}/admin/event", web_context.config.external_base); 25 26 // Create the template renderer with enhanced context 27 let renderer = create_renderer!(web_context.clone(), language, false, false); 28 29 // Get the event record by AT-URI 30 let event = event_get(&web_context.pool, &query.aturi).await; 31 if let Err(err) = event { 32 return contextual_error!(renderer: renderer, err, template_context!{ aturi => query.aturi.clone() }); 33 } 34 let event = event.unwrap(); 35 36 // Also provide the full event object as JSON 37 let event_json = serde_json::to_string_pretty(&event) 38 .unwrap_or_else(|_| "Error formatting JSON".to_string()); 39 40 Ok(renderer.render_template( 41 "admin_event", 42 template_context! { 43 aturi => query.aturi.clone(), 44 event => event, 45 event_json => event_json, 46 }, 47 Some(&admin_ctx.admin_handle), 48 &canonical_url, 49 )) 50}