use askama::Template; use crate::views::post::PostView; use crate::views::posts::PostsView; use crate::posts::abstractions::repo::PostRepo; use crate::views::policies::PoliciesTemplate; use crate::views::index::IndexTemplate; use crate::views::brochure::BrochureTemplate; use crate::views::about::AboutView; use crate::tutors::abstractions::tutor_repo::TutorRepo; use std::sync::Arc; use axum::response::Html; use axum::extract::{State, Path}; pub async fn about_handler(State(repo): State>) -> Html { let view = AboutView::with_tutors(repo.load()); Html(view.render().unwrap()) } pub async fn brochure_handler() -> Html { Html(BrochureTemplate{}.render().unwrap()) } pub async fn index_handler() -> Html { Html(IndexTemplate {}.render().unwrap()) } pub async fn policies_handler() -> Html { Html(PoliciesTemplate{}.render().unwrap()) } pub async fn posts_handler(State(repo): State>) -> Html { let view = PostsView::with_posts(repo.load()); Html(view.render().unwrap()) } pub async fn post_handler(Path(post_id): Path, State(repo): State>) -> Html { let view = PostView::with_post(repo.by_id(&post_id)); Html(view.render().unwrap()) }