use anyhow::Result; use axum::{extract::Query, response::IntoResponse}; use minijinja::context as template_context; use crate::{ contextual_error, create_renderer, http::{ context::AdminRequestContext, errors::WebError, pagination::{Pagination, PaginationView}, }, storage::event::event_list, }; pub async fn handle_admin_events( admin_ctx: AdminRequestContext, pagination: Query, ) -> Result { let language = admin_ctx.language; let web_context = admin_ctx.web_context; let canonical_url = format!("https://{}/admin/events", web_context.config.external_base); // Create the template renderer with enhanced context let renderer = create_renderer!(web_context.clone(), language, false, false); let (page, page_size) = pagination.admin_clamped(); let events = event_list(&web_context.pool, page, page_size).await; if let Err(err) = events { return contextual_error!(renderer: renderer, err, template_context!{}); } let (total_count, mut events) = events.unwrap(); let params: Vec<(&str, &str)> = vec![]; let pagination_view = PaginationView::new(page_size, events.len() as i64, page, params); if events.len() > page_size as usize { events.truncate(page_size as usize); } Ok(renderer.render_template( "admin_events", template_context! { events => events, total_count => total_count, pagination => pagination_view, }, Some(&admin_ctx.admin_handle), &canonical_url, )) }