use std::sync::Arc; use poem::{ error::InternalServerError, handler, web::{Data, Html}, }; use tera::Context; use crate::{ app_state::AppState, data::book::Book, handlers::error::SqliteError, templates::TEMPLATES, }; #[handler] pub async fn handler(state: Data<&Arc>) -> Result, poem::Error> { let recent_books = state.calibre.recent_books(50).map_err(SqliteError)?; let recent_books = recent_books .iter() .filter_map(|x| { let author = state.calibre.book_author(x.id).ok()?; let series = state.calibre.book_series(x.id).ok()?; Some(Book::from_db_book(x, series, &author.name)) }) .collect::>(); let mut context = Context::new(); context.insert("books", &recent_books); TEMPLATES .render("recents", &context) .map_err(InternalServerError) .map(Html) }