| 41 | |
| 42 | #[handler] |
| 43 | async fn list(req: &mut Request, depot: &mut Depot) -> Result<Text<String>> { |
| 44 | let state = depot |
| 45 | .obtain::<AppState>() |
| 46 | .ok_or_else(StatusError::internal_server_error)?; |
| 47 | let conn = &state.conn; |
| 48 | |
| 49 | let page = req.query("page").unwrap_or(1); |
| 50 | let posts_per_page = req |
| 51 | .query("posts_per_page") |
| 52 | .unwrap_or(DEFAULT_POSTS_PER_PAGE); |
| 53 | |
| 54 | let (posts, num_pages) = Query::find_posts_in_page(conn, page, posts_per_page) |
| 55 | .await |
| 56 | .map_err(|_| StatusError::internal_server_error())?; |
| 57 | |
| 58 | let mut ctx = tera::Context::new(); |
| 59 | ctx.insert("posts", &posts); |
| 60 | ctx.insert("page", &page); |
| 61 | ctx.insert("posts_per_page", &posts_per_page); |
| 62 | ctx.insert("num_pages", &num_pages); |
| 63 | |
| 64 | let body = state |
| 65 | .templates |
| 66 | .render("index.html.tera", &ctx) |
| 67 | .map_err(|_| StatusError::internal_server_error())?; |
| 68 | Ok(Text::Html(body)) |
| 69 | } |
| 70 | |
| 71 | #[handler] |
| 72 | async fn new(depot: &mut Depot) -> Result<Text<String>> { |