diff --git a/backend/server/src/modules/blog/components/check_update/apply.rs b/backend/server/src/modules/blog/components/check_update/apply.rs index 808b3c0..ffb1eb9 100644 --- a/backend/server/src/modules/blog/components/check_update/apply.rs +++ b/backend/server/src/modules/blog/components/check_update/apply.rs @@ -18,6 +18,7 @@ const CREATE_RETURN_TAG_ID: &str = include_str!("sql/create_return_tag_id.sql"); const CREATE_RETURN_CATEGORY_ID: &str = include_str!("sql/create_return_category_id.sql"); const CREATE_POST_GENERAL: &str = include_str!("sql/create_post_general.sql"); const CREATE_POST_TAGS: &str = include_str!("sql/create_post_tags.sql"); +const CREATE_POST_META: &str = include_str!("sql/create_post_meta.sql"); pub async fn apply_deltas(db_conn: &PgPool, changes: Vec) { let handlers = changes @@ -118,6 +119,19 @@ async fn handle_create(db: &PgPool, create: Create) { } }; + const KEY_TO_SKIP: &[&str] = &[ + "category", "status", "id", "date", "update", "tags", "title", "subtitle", + ]; + let (post_meta_key, post_meta_value): (Vec, Vec) = + if let Some(kv) = create.payload.meta.as_object() { + kv.iter() + .filter(|(k, _)| !KEY_TO_SKIP.contains(&&***k)) + .map(|(k, v)| (k.clone(), v.as_str().unwrap().to_string())) + .collect() + } else { + (vec![], vec![]) + }; + let meta = create.payload.meta; let post_id = create.uuid; let post_identifier = &identifier; @@ -174,6 +188,17 @@ async fn handle_create(db: &PgPool, create: Create) { return; } + if let Err(e) = query(CREATE_POST_META) + .bind(post_id) + .bind(post_meta_key) + .bind(post_meta_value) + .execute(&mut *tx) + .await + { + error!("failed to insert post {}: {}", &identifier, e); + return; + } + tx.commit().await.unwrap(); } diff --git a/backend/server/src/modules/blog/components/check_update/sql/create_post_meta.sql b/backend/server/src/modules/blog/components/check_update/sql/create_post_meta.sql new file mode 100644 index 0000000..293da0c --- /dev/null +++ b/backend/server/src/modules/blog/components/check_update/sql/create_post_meta.sql @@ -0,0 +1,3 @@ +INSERT INTO metadata (pid, meta_key, meta_value) +SELECT $1, key, value +FROM UNNEST($2, $3) AS k(key, value); diff --git a/backend/server/src/modules/blog/components/consistency_guard/utils.rs b/backend/server/src/modules/blog/components/consistency_guard/utils.rs index 7db0dc7..d8e2825 100644 --- a/backend/server/src/modules/blog/components/consistency_guard/utils.rs +++ b/backend/server/src/modules/blog/components/consistency_guard/utils.rs @@ -1,9 +1,10 @@ -use crate::modules::blog::components::consistency_guard::error::Error; use std::{ fs, path::{Path, PathBuf}, }; +use crate::modules::blog::components::consistency_guard::error::Error; + pub fn rec_find_dir_entries(entry: &Path) -> Result, Error> { if !entry.exists() { return Err(Error::InvalidPath(entry.to_path_buf())); diff --git a/backend/server/src/modules/blog/mod.rs b/backend/server/src/modules/blog/mod.rs index b782ef0..707de44 100644 --- a/backend/server/src/modules/blog/mod.rs +++ b/backend/server/src/modules/blog/mod.rs @@ -5,12 +5,8 @@ use crate::{ modules::{ Module, blog::{ - api::{ - get_page_count, - get_post, - // get_post_list::get_post_list, - }, - components::{check_update, consistency_guard}, // cron::check_update, + api::{get_page_count, get_post}, + components::{check_update, consistency_guard}, }, }, scheduler::tasks::{CronTask, async_basic::AsyncBasic}, @@ -54,7 +50,6 @@ impl Module for Blog { "Consistency Guard", AsyncBasic::new( consistency_guard::task(db_handler.clone()), - // "*/15 * * * * *", "*/15 * * * * *", ) .unwrap()