broadcasts segments enum

This commit is contained in:
2024-10-07 10:08:56 +02:00
parent e04e4f6491
commit 08050baf98
8 changed files with 82 additions and 61 deletions

View File

@ -1,35 +1,50 @@
use std::rc::Rc;
use std::{fmt::Display, rc::Rc};
use crate::blog_posts::blog_post_model::BlogPostMetadata;
use crate::blog_posts::blog_post_model::{BlogPostMetadata, Segment};
use super::post_parser::ParseResult;
// // TODO convert segmetns to enum, find out how to serde to enum vlaue
// pub fn get_posts_by_segment(
// post_list: &Vec<ParseResult<BlogPostMetadata>>,
// segments: &Vec<String>,
// ) -> Vec<ParseResult<BlogPostMetadata>> {
// let mut filtered_posts: Vec<ParseResult<BlogPostMetadata>> = post_list
// .iter()
// .filter(|post| {
// segments
// .iter()
// .all(|segment| post.metadata.segments.contains(segment))
// }) // Filter by segments
// .filter(|post| post.metadata.published) // Filter only published posts
// .cloned()
// .collect();
impl Segment {
fn as_str(&self) -> &'static str {
match self {
Segment::Blog => "blog",
Segment::Broadcasts => "broadcasts",
Segment::Featured => "featured",
Segment::Cookbook => "cookbook",
}
}
}
// // Sort by date in descending order
// filtered_posts.sort_by_key(|post| post.metadata.date);
// filtered_posts.reverse();
impl Display for Segment {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
// filtered_posts
// }
pub fn get_posts_by_segment(
post_list: Vec<ParseResult<BlogPostMetadata>>,
segments: &[Segment],
) -> Vec<ParseResult<BlogPostMetadata>> {
let mut filtered_posts: Vec<ParseResult<BlogPostMetadata>> = post_list
.into_iter()
.filter(|post| {
segments
.iter()
.all(|segment| post.metadata.segments.contains(segment))
}) // Filter by segments
.filter(|post| post.metadata.published) // Filter only published posts
.collect();
// Sort by date in descending order
filtered_posts.sort_by_key(|post| post.metadata.date);
filtered_posts.reverse();
filtered_posts
}
pub fn ref_get_posts_by_segment(
post_list: &[Rc<ParseResult<BlogPostMetadata>>],
segments: &[String],
segments: &[Segment],
) -> Vec<Rc<ParseResult<BlogPostMetadata>>> {
let mut filtered_posts: Vec<Rc<ParseResult<BlogPostMetadata>>> = post_list
.iter() // Use iter() to borrow instead of consuming the original vector

View File

@ -2,11 +2,11 @@ use axum::http::StatusCode;
use std::collections::HashMap;
use tracing::debug;
use crate::blog_posts::blog_post_model::{BlogPostMetadata, BLOG_POST_PATH};
use crate::blog_posts::blog_post_model::{BlogPostMetadata, Segment, BLOG_POST_PATH};
use super::{post_listing::get_post_list, post_parser::ParseResult};
pub async fn get_popular_tags(segment: Option<String>) -> Result<Vec<String>, StatusCode> {
pub async fn get_popular_tags(segment: Option<Segment>) -> Result<Vec<String>, StatusCode> {
const TAGS_LENGTH: usize = 7;
let mut post_list = get_post_list::<BlogPostMetadata>(BLOG_POST_PATH).await?;