broadcasts segments enum
This commit is contained in:
@ -6,10 +6,11 @@ use tokio::try_join;
|
||||
use tracing::debug;
|
||||
|
||||
use crate::{
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, BLOG_POST_PATH},
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, Segment, BLOG_POST_PATH},
|
||||
components::site_header::{HeaderProps, Link},
|
||||
post_utils::{
|
||||
post_listing::get_post_list,
|
||||
segments::get_posts_by_segment,
|
||||
tags::{get_popular_tags, get_posts_by_tag},
|
||||
},
|
||||
projects::featured_projects::get_featured_projects,
|
||||
@ -17,6 +18,7 @@ use crate::{
|
||||
|
||||
use super::post_list::PostListTemplate;
|
||||
|
||||
// TODO Refactor to render post list for the same broadcasts, blog and cookbook
|
||||
pub async fn render_blog_post_list(
|
||||
tag: Option<Path<String>>,
|
||||
OriginalUri(original_uri): OriginalUri,
|
||||
@ -24,18 +26,14 @@ pub async fn render_blog_post_list(
|
||||
// I will forget what happens here in a week. But essentially it's pattern matching and shadowing
|
||||
let tag = tag.map(|Path(tag)| tag);
|
||||
|
||||
let (blog_tags, featured_projects, mut post_list) = try_join!(
|
||||
get_popular_tags(Some("blog".to_string())),
|
||||
let (blog_tags, featured_projects, post_list) = try_join!(
|
||||
get_popular_tags(Some(Segment::Blog)),
|
||||
get_featured_projects(),
|
||||
get_post_list::<BlogPostMetadata>(BLOG_POST_PATH)
|
||||
)?;
|
||||
|
||||
post_list.sort_by_key(|post| post.metadata.date);
|
||||
post_list.retain(|post| post.metadata.published);
|
||||
post_list.retain(|post| post.metadata.segments.contains(&"blog".to_string()));
|
||||
post_list.reverse();
|
||||
|
||||
let posts = get_posts_by_tag(post_list, &tag);
|
||||
let posts = get_posts_by_segment(post_list, &[Segment::Blog]);
|
||||
let posts = get_posts_by_tag(posts, &tag);
|
||||
let header_props = match tag {
|
||||
Some(_) => HeaderProps::with_back_link(Link {
|
||||
href: "/blog".to_string(),
|
||||
@ -55,7 +53,7 @@ pub async fn render_blog_post_list(
|
||||
Ok(PostListTemplate {
|
||||
title,
|
||||
og_title,
|
||||
segment: "blog".to_string(),
|
||||
segment: Segment::Blog,
|
||||
posts,
|
||||
header_props,
|
||||
tags: blog_tags,
|
||||
|
@ -6,10 +6,11 @@ use tokio::try_join;
|
||||
use tracing::debug;
|
||||
|
||||
use crate::{
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, BLOG_POST_PATH},
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, Segment, BLOG_POST_PATH},
|
||||
components::site_header::{HeaderProps, Link},
|
||||
post_utils::{
|
||||
post_listing::get_post_list,
|
||||
segments::get_posts_by_segment,
|
||||
tags::{get_popular_tags, get_posts_by_tag},
|
||||
},
|
||||
projects::featured_projects::get_featured_projects,
|
||||
@ -24,18 +25,14 @@ pub async fn render_broadcast_post_list(
|
||||
// I will forget what happens here in a week. But essentially it's pattern matching and shadowing
|
||||
let tag = tag.map(|Path(tag)| tag);
|
||||
|
||||
let (popular_tags, featured_projects, mut post_list) = try_join!(
|
||||
get_popular_tags(Some("broadcasts".to_string())),
|
||||
let (popular_tags, featured_projects, post_list) = try_join!(
|
||||
get_popular_tags(Some(Segment::Broadcasts)),
|
||||
get_featured_projects(),
|
||||
get_post_list::<BlogPostMetadata>(BLOG_POST_PATH)
|
||||
)?;
|
||||
|
||||
post_list.sort_by_key(|post| post.metadata.date);
|
||||
post_list.retain(|post| post.metadata.published);
|
||||
post_list.retain(|post| post.metadata.segments.contains(&"broadcasts".to_string()));
|
||||
post_list.reverse();
|
||||
|
||||
let posts = get_posts_by_tag(post_list, &tag);
|
||||
let posts = get_posts_by_segment(post_list, &[Segment::Broadcasts]);
|
||||
let posts = get_posts_by_tag(posts, &tag);
|
||||
|
||||
let header_props = match tag {
|
||||
Some(_) => HeaderProps::with_back_link(Link {
|
||||
@ -56,7 +53,7 @@ pub async fn render_broadcast_post_list(
|
||||
Ok(PostListTemplate {
|
||||
title: title.clone(),
|
||||
og_title: title,
|
||||
segment: "broadcasts".to_string(),
|
||||
segment: Segment::Broadcasts,
|
||||
posts,
|
||||
header_props,
|
||||
tags: popular_tags,
|
||||
|
@ -5,7 +5,7 @@ use axum::http::StatusCode;
|
||||
use tokio::try_join;
|
||||
|
||||
use crate::{
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, BLOG_POST_PATH},
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, Segment, BLOG_POST_PATH},
|
||||
components::site_header::HeaderProps,
|
||||
filters,
|
||||
post_utils::{
|
||||
@ -28,8 +28,8 @@ pub struct IndexTemplate {
|
||||
|
||||
pub async fn render_index() -> Result<IndexTemplate, StatusCode> {
|
||||
let (blog_tags, broadcasts_tags, all_posts, featured_projects) = try_join!(
|
||||
get_popular_tags(Some("blog".to_string())),
|
||||
get_popular_tags(Some("broadcasts".to_string())),
|
||||
get_popular_tags(Some(Segment::Blog)),
|
||||
get_popular_tags(Some(Segment::Broadcasts)),
|
||||
get_post_list::<BlogPostMetadata>(BLOG_POST_PATH),
|
||||
get_featured_projects()
|
||||
)?;
|
||||
@ -39,12 +39,10 @@ pub async fn render_index() -> Result<IndexTemplate, StatusCode> {
|
||||
all_posts.into_iter().map(Rc::new).collect();
|
||||
|
||||
let featured_blog_posts =
|
||||
ref_get_posts_by_segment(&all_posts_rc, &["blog".to_string(), "featured".to_string()]);
|
||||
ref_get_posts_by_segment(&all_posts_rc, &[Segment::Blog, Segment::Featured]);
|
||||
|
||||
let featured_broadcasts = ref_get_posts_by_segment(
|
||||
&all_posts_rc,
|
||||
&["broadcasts".to_string(), "featured".to_string()],
|
||||
);
|
||||
let featured_broadcasts =
|
||||
ref_get_posts_by_segment(&all_posts_rc, &[Segment::Broadcasts, Segment::Featured]);
|
||||
|
||||
Ok(IndexTemplate {
|
||||
header_props: HeaderProps::default(),
|
||||
|
@ -1,8 +1,11 @@
|
||||
use askama::Template;
|
||||
|
||||
use crate::{
|
||||
blog_posts::blog_post_model::BlogPostMetadata, components::site_header::HeaderProps, filters,
|
||||
post_utils::post_parser::ParseResult, projects::project_model::ProjectMetadata,
|
||||
blog_posts::blog_post_model::{BlogPostMetadata, Segment},
|
||||
components::site_header::HeaderProps,
|
||||
filters,
|
||||
post_utils::post_parser::ParseResult,
|
||||
projects::project_model::ProjectMetadata,
|
||||
};
|
||||
|
||||
#[derive(Template)]
|
||||
@ -10,7 +13,7 @@ use crate::{
|
||||
pub struct PostListTemplate {
|
||||
pub title: String,
|
||||
pub og_title: String,
|
||||
pub segment: String,
|
||||
pub segment: Segment,
|
||||
pub posts: Vec<ParseResult<BlogPostMetadata>>,
|
||||
pub header_props: HeaderProps,
|
||||
pub tags: Vec<String>,
|
||||
|
Reference in New Issue
Block a user