diff --git a/backend/markdown/src/lib.rs b/backend/markdown/src/lib.rs index 471ed53..353e736 100644 --- a/backend/markdown/src/lib.rs +++ b/backend/markdown/src/lib.rs @@ -8,7 +8,7 @@ use crate::{ utils::front_matter::{parse_front_matter, split_md_front_matter}, }; -use base64::{engine::general_purpose, Engine}; +use base64::{Engine, engine::general_purpose}; use serde::Serialize; use serde_json::Value; use sha2::{Digest, Sha256}; diff --git a/backend/server/src/modules/blog/api/get_post/mod.rs b/backend/server/src/modules/blog/api/get_post/mod.rs index 4722392..a2b8df7 100644 --- a/backend/server/src/modules/blog/api/get_post/mod.rs +++ b/backend/server/src/modules/blog/api/get_post/mod.rs @@ -7,28 +7,29 @@ use axum::{ }; use serde_json::json; use sqlx::PgPool; +use uuid::Uuid; -const GET_POST_BY_I64_ID: &str = include_str!("get_post_by_i64_id.sql"); +const GET_POST_BY_UUID: &str = include_str!("get_post_by_uuid.sql"); const GET_POST_BY_STR_ID: &str = include_str!("get_post_by_str_id.sql"); pub async fn handler( State(db_connection): State, Path(identifier): Path, ) -> impl IntoResponse { - if let Ok(id) = identifier.parse::() { - select_post_with_i64_id(&db_connection, id).await + if let Ok(id) = identifier.parse::() { + select_post_by_uuid(&db_connection, id).await } else { - select_post_with_str_id(&db_connection, &identifier).await + select_post_by_str_id(&db_connection, &identifier).await }; Json::from(json!({"res": "ok"})).into_response() } -async fn select_post_with_i64_id(db: &PgPool, id: i64) { +async fn select_post_by_uuid(db: &PgPool, id: Uuid) { dev_consume!(db, id); todo!() } -async fn select_post_with_str_id(db: &PgPool, id: &str) { +async fn select_post_by_str_id(db: &PgPool, id: &str) { dev_consume!(db, id); todo!() } diff --git a/backend/server/src/modules/blog/components/check_update/apply.rs b/backend/server/src/modules/blog/components/check_update/apply.rs new file mode 100644 index 0000000..68f5da8 --- /dev/null +++ b/backend/server/src/modules/blog/components/check_update/apply.rs @@ -0,0 +1,39 @@ +use crate::modules::blog::components::check_update::changes::{ + Change, Create, Delete, Move, Update, +}; + +use futures::{ + FutureExt, + future::{BoxFuture, join_all}, +}; +use sqlx::PgPool; + +pub async fn apply_deltas(db_conn: &PgPool, changes: Vec) { + let handlers = changes + .into_iter() + .map(|change| match change { + Change::Delete(del) => handle_delete(db_conn, del).boxed(), + Change::Move(mv) => handle_move(db_conn, mv).boxed(), + Change::Update(update) => handle_update(db_conn, update).boxed(), + Change::Create(create) => handle_create(db_conn, create).boxed(), + }) + .collect::>>(); + + join_all(handlers).await; +} + +async fn handle_delete(db: &PgPool, del: Delete) { + todo!() +} + +async fn handle_move(db: &PgPool, mv: Move) { + todo!() +} + +async fn handle_update(db: &PgPool, update: Update) { + todo!() +} + +async fn handle_create(db: &PgPool, create: Create) { + todo!() +} diff --git a/backend/server/src/modules/blog/components/check_update/mod.rs b/backend/server/src/modules/blog/components/check_update/mod.rs index 5d13c39..f1bf54f 100644 --- a/backend/server/src/modules/blog/components/check_update/mod.rs +++ b/backend/server/src/modules/blog/components/check_update/mod.rs @@ -11,11 +11,14 @@ use crate::{ }; use macros::panic_with_log; +use crate::modules::blog::components::check_update::apply::apply_deltas; use sqlx::PgPool; -use tracing::{trace, warn, Level}; +use tracing::log::error; +use tracing::{Level, trace, warn}; // mod error; // mod index; +mod apply; mod changes; mod error; mod pull; @@ -85,7 +88,10 @@ async fn workflow(args: Arc) { .await { Ok(updates) => updates, - Err(_) => return, + Err(e) => { + error!("delta parsing error: {}", e); + return; + } }; if deltas.is_empty() { @@ -93,5 +99,5 @@ async fn workflow(args: Arc) { return; } - // todo: load delta to database + apply_deltas(&args.db_connection, deltas).await; } diff --git a/backend/server/src/modules/blog/components/check_update/pull.rs b/backend/server/src/modules/blog/components/check_update/pull.rs index 144485f..b2c2224 100644 --- a/backend/server/src/modules/blog/components/check_update/pull.rs +++ b/backend/server/src/modules/blog/components/check_update/pull.rs @@ -1,16 +1,14 @@ -use std::collections::HashMap; -use std::path::PathBuf; +use std::{collections::HashMap, path::PathBuf}; use crate::{ modules::blog::components::check_update::{ - changes::{Change, Create, Delete, Update}, + changes::{Change, Create, CreateDelete2UpdateSlot, Delete, Update}, error::Error, }, utils::{git, git::FileDelta}, }; use markdown::MdFile; -use crate::modules::blog::components::check_update::changes::CreateDelete2UpdateSlot; use git2::{Delta, Repository}; use tracing::error; use uuid::Uuid; diff --git a/backend/server/src/modules/blog/mod.rs b/backend/server/src/modules/blog/mod.rs index 28cb2b9..f536972 100644 --- a/backend/server/src/modules/blog/mod.rs +++ b/backend/server/src/modules/blog/mod.rs @@ -5,6 +5,7 @@ use crate::modules::blog::components::check_update; use crate::scheduler::tasks::async_basic::AsyncBasic; use crate::{ modules::{ + Module, blog::{ api::{ get_page_count, @@ -13,12 +14,11 @@ use crate::{ }, // cron::check_update, }, - Module, }, scheduler::tasks::CronTask, }; -use axum::{routing::get, Router}; +use axum::{Router, routing::get}; use sqlx::PgPool; const MOUNT_POINT: &str = "/blog"; diff --git a/backend/server/src/utils/git.rs b/backend/server/src/utils/git.rs index 67af5a6..471a7cc 100644 --- a/backend/server/src/utils/git.rs +++ b/backend/server/src/utils/git.rs @@ -3,12 +3,11 @@ /// https://github.com/rust-lang/git2-rs/commit/f3b87baed1e33d6c2d94fe1fa6aa6503a071d837 /// use git2::{ - build, AnnotatedCommit, AutotagOption, Delta, FetchOptions, Reference, Remote, Repository, + AnnotatedCommit, AutotagOption, Delta, FetchOptions, Reference, Remote, Repository, build, }; use std::path::PathBuf; use tracing::{error, warn}; - #[derive(Debug, Eq, PartialEq)] pub struct FileDelta { pub old_path: Option,