diff --git a/backend/api_server/src/blog/cron/check_update.rs b/backend/api_server/src/blog/cron/check_update.rs index 3a9f6b8..ef1eca0 100644 --- a/backend/api_server/src/blog/cron/check_update.rs +++ b/backend/api_server/src/blog/cron/check_update.rs @@ -1,4 +1,6 @@ -pub fn task() { +use sqlx::{Pool, Postgres}; + +pub fn task(db_connection: &Pool) { // get dir // let git_work_dir_path = &env::var("GIT_WORK_DIR").unwrap_or_else(|e| { // if let Ok(default_log_path) = env::var("WORK_DIR") { diff --git a/backend/api_server/src/blog/cron/mod.rs b/backend/api_server/src/blog/cron/mod.rs index 5f06dc5..71581de 100644 --- a/backend/api_server/src/blog/cron/mod.rs +++ b/backend/api_server/src/blog/cron/mod.rs @@ -1,10 +1,14 @@ use crate::scheduler::tasks::basic::BasicTask; use crate::scheduler::tasks::Task; +use sqlx::{Pool, Postgres}; pub mod check_update; -pub fn get_tasks() -> Vec> { - vec![BasicTask::new(check_update::task, "* * * * * *") - .unwrap() - .to_task()] +pub fn get_tasks(db_connection: Pool) -> Vec> { + let db_conn_clone = db_connection.clone(); + vec![ + BasicTask::new(move || check_update::task(&db_conn_clone), "* * * * * *") + .unwrap() + .to_task(), + ] } diff --git a/backend/api_server/src/init/cron.rs b/backend/api_server/src/init/cron.rs index 5b17651..429537a 100644 --- a/backend/api_server/src/init/cron.rs +++ b/backend/api_server/src/init/cron.rs @@ -1,9 +1,10 @@ use crate::blog; use crate::scheduler::Scheduler; +use sqlx::{Pool, Postgres}; -pub fn start() { +pub fn start(db_pool: Pool) { let scheduler = Scheduler::new(); - let _ = vec![blog::cron::get_tasks()] + let _ = vec![blog::cron::get_tasks(db_pool.clone())] .into_iter() .map(|list| scheduler.insert_list(list)) .collect::>(); diff --git a/backend/api_server/src/init/mod.rs b/backend/api_server/src/init/mod.rs index f2d02fb..2332914 100644 --- a/backend/api_server/src/init/mod.rs +++ b/backend/api_server/src/init/mod.rs @@ -1,6 +1,7 @@ mod cron; mod database; pub mod logger; +mod schema; pub mod server; use macros::panic_with_log; @@ -39,9 +40,10 @@ pub async fn start() { }; // schema init + schema::init(&db_pool).await; // load cron task - cron::start(); + cron::start(db_pool.clone()); // api serve match server::start(db_pool).await { diff --git a/backend/api_server/src/init/schema.rs b/backend/api_server/src/init/schema.rs new file mode 100644 index 0000000..41ccb34 --- /dev/null +++ b/backend/api_server/src/init/schema.rs @@ -0,0 +1,49 @@ +use sqlx::{query, Pool, Postgres}; +use tracing::info; + +const POST_BASE_MODEL: &str = r##" +CREATE TABLE IF NOT EXISTS Post +( + post_id UUID PRIMARY KEY, + title VARCHAR(255) NOT NULL, + category VARCHAR(255) NOT NULL, + header_img TEXT, + summary TEXT, + sub_title TEXT, + content TEXT NOT NULL, + last_update TIMESTAMPTZ NOT NULL, + first_update TIMESTAMPTZ NOT NULL +); +"##; + +// base model, will add more cols at runtime +const POST_META_MODEL: &str = r##" +CREATE TABLE IF NOT EXISTS Meta +( + post_id UUID PRIMARY KEY +); +"##; + +const POST_HASH_MODEL: &str = r##" +CREATE TABLE IF NOT EXISTS Hash +( + post_id UUID PRIMARY KEY, + hash VARCHAR(44) +); +"##; + +const TAG_MODEL: &str = r##" +CREATE TABLE IF NOT EXISTS Tag +( + post_id UUID NOT NULL, + tag VARCHAR(255) NOT NULL +); +"##; + +pub async fn init(db_connection: &Pool) { + query(POST_BASE_MODEL).execute(db_connection).await.unwrap(); + query(POST_META_MODEL).execute(db_connection).await.unwrap(); + query(TAG_MODEL).execute(db_connection).await.unwrap(); + query(POST_HASH_MODEL).execute(db_connection).await.unwrap(); + info!("database schema initialized"); +} diff --git a/backend/markdown/src/lib.rs b/backend/markdown/src/lib.rs index ce6345f..b1e3562 100644 --- a/backend/markdown/src/lib.rs +++ b/backend/markdown/src/lib.rs @@ -15,11 +15,11 @@ use crate::utils::front_matter::{parse_front_matter, split_md_front_matter}; #[derive(Default, Debug, Serialize)] pub struct MdFile { - file_id: Uuid, - file_name: String, - meta: Value, - content: String, - hash: String, + pub file_id: Uuid, + pub file_name: String, + pub meta: Value, + pub content: String, + pub hash: String, } impl MdFile {