little-hesinde/rusty-library/src/handlers/recents.rs

34 lines
867 B
Rust
Raw Normal View History

2024-05-02 18:10:29 +02:00
use std::sync::Arc;
use poem::{
error::InternalServerError,
handler,
web::{Data, Html},
};
use tera::Context;
2024-05-06 09:09:40 +02:00
use crate::{
2024-05-09 08:39:46 +02:00
app_state::AppState, data::book::Book, handlers::error::HandlerError, templates::TEMPLATES,
2024-05-06 09:09:40 +02:00
};
2024-05-02 18:10:29 +02:00
#[handler]
pub async fn handler(state: Data<&Arc<AppState>>) -> Result<Html<String>, poem::Error> {
2024-05-09 08:39:46 +02:00
let recent_books = state
.calibre
.recent_books(25)
.map_err(HandlerError::DataError)?;
2024-05-06 09:09:40 +02:00
let recent_books = recent_books
.iter()
2024-05-06 10:40:34 +02:00
.filter_map(|x| Book::full_book(x, &state))
2024-05-06 09:09:40 +02:00
.collect::<Vec<Book>>();
2024-05-02 18:10:29 +02:00
let mut context = Context::new();
2024-05-06 13:51:49 +02:00
context.insert("title", "Recent Books");
context.insert("nav", "recent");
2024-05-02 18:10:29 +02:00
context.insert("books", &recent_books);
TEMPLATES
2024-05-06 14:42:14 +02:00
.render("book_list", &context)
2024-05-02 18:10:29 +02:00
.map_err(InternalServerError)
.map(Html)
}