feat(templates): add base layout, login, register, new_review templates; update diary

This commit is contained in:
2026-05-04 13:30:33 +02:00
parent 6e7c6467a7
commit 450468ef3d
6 changed files with 198 additions and 80 deletions

View File

@@ -1,5 +1,7 @@
use askama::Template;
use application::ports::HtmlRenderer;
use application::ports::{
HtmlPageContext, HtmlRenderer, LoginPageData, NewReviewPageData, RegisterPageData,
};
use domain::models::{DiaryEntry, collections::Paginated};
#[derive(Template)]
@@ -9,6 +11,28 @@ struct DiaryTemplate<'a> {
current_offset: u32,
limit: u32,
has_more: bool,
ctx: &'a HtmlPageContext,
}
#[derive(Template)]
#[template(path = "login.html")]
struct LoginTemplate<'a> {
error: Option<&'a str>,
ctx: &'a HtmlPageContext,
}
#[derive(Template)]
#[template(path = "register.html")]
struct RegisterTemplate<'a> {
error: Option<&'a str>,
ctx: &'a HtmlPageContext,
}
#[derive(Template)]
#[template(path = "new_review.html")]
struct NewReviewTemplate<'a> {
error: Option<&'a str>,
ctx: &'a HtmlPageContext,
}
pub struct AskamaHtmlRenderer;
@@ -20,16 +44,43 @@ impl AskamaHtmlRenderer {
}
impl HtmlRenderer for AskamaHtmlRenderer {
fn render_diary_page(&self, data: &Paginated<DiaryEntry>) -> Result<String, String> {
fn render_diary_page(&self, data: &Paginated<DiaryEntry>, ctx: HtmlPageContext) -> Result<String, String> {
let has_more = (data.offset + data.limit) < data.total_count as u32;
let template = DiaryTemplate {
DiaryTemplate {
entries: &data.items,
current_offset: data.offset,
limit: data.limit,
has_more,
};
ctx: &ctx,
}
.render()
.map_err(|e| e.to_string())
}
template.render().map_err(|e| e.to_string())
fn render_login_page(&self, data: LoginPageData<'_>) -> Result<String, String> {
LoginTemplate {
error: data.error,
ctx: &data.ctx,
}
.render()
.map_err(|e| e.to_string())
}
fn render_register_page(&self, data: RegisterPageData<'_>) -> Result<String, String> {
RegisterTemplate {
error: data.error,
ctx: &data.ctx,
}
.render()
.map_err(|e| e.to_string())
}
fn render_new_review_page(&self, data: NewReviewPageData<'_>) -> Result<String, String> {
NewReviewTemplate {
error: data.error,
ctx: &data.ctx,
}
.render()
.map_err(|e| e.to_string())
}
}