feat(init::schema) init database schema

This commit is contained in:
lumither committed 2024-11-20 21:38:36 -08:00
1 parent 7f400470ff
commit 99a19d8d9e
6 files changed
+70 -12

No files matched your search

@@ -1,4 +1,6 @@
pub fn task() { use sqlx::{Pool, Postgres};
pub fn task(db_connection: &Pool<Postgres>) {
// get dir // get dir
// let git_work_dir_path = &env::var("GIT_WORK_DIR").unwrap_or_else(|e| { // let git_work_dir_path = &env::var("GIT_WORK_DIR").unwrap_or_else(|e| {
// if let Ok(default_log_path) = env::var("WORK_DIR") { // if let Ok(default_log_path) = env::var("WORK_DIR") {
+7 -3
View File
@@ -1,10 +1,14 @@
use crate::scheduler::tasks::basic::BasicTask; use crate::scheduler::tasks::basic::BasicTask;
use crate::scheduler::tasks::Task; use crate::scheduler::tasks::Task;
use sqlx::{Pool, Postgres};
pub mod check_update; pub mod check_update;
pub fn get_tasks() -> Vec<Box<dyn Task>> { pub fn get_tasks(db_connection: Pool<Postgres>) -> Vec<Box<dyn Task>> {
vec![BasicTask::new(check_update::task, "* * * * * *") let db_conn_clone = db_connection.clone();
vec![
BasicTask::new(move || check_update::task(&db_conn_clone), "* * * * * *")
.unwrap() .unwrap()
.to_task()] .to_task(),
]
} }
+3 -2
View File
@@ -1,9 +1,10 @@
use crate::blog; use crate::blog;
use crate::scheduler::Scheduler; use crate::scheduler::Scheduler;
use sqlx::{Pool, Postgres};
pub fn start() { pub fn start(db_pool: Pool<Postgres>) {
let scheduler = Scheduler::new(); let scheduler = Scheduler::new();
let _ = vec![blog::cron::get_tasks()] let _ = vec![blog::cron::get_tasks(db_pool.clone())]
.into_iter() .into_iter()
.map(|list| scheduler.insert_list(list)) .map(|list| scheduler.insert_list(list))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
+3 -1
View File
@@ -1,6 +1,7 @@
mod cron; mod cron;
mod database; mod database;
pub mod logger; pub mod logger;
mod schema;
pub mod server; pub mod server;
use macros::panic_with_log; use macros::panic_with_log;
@@ -39,9 +40,10 @@ pub async fn start() {
}; };
// schema init // schema init
schema::init(&db_pool).await;
// load cron task // load cron task
cron::start(); cron::start(db_pool.clone());
// api serve // api serve
match server::start(db_pool).await { match server::start(db_pool).await {
+49
View File
@@ -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<Postgres>) {
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");
}
+5 -5
View File
@@ -15,11 +15,11 @@ use crate::utils::front_matter::{parse_front_matter, split_md_front_matter};
#[derive(Default, Debug, Serialize)] #[derive(Default, Debug, Serialize)]
pub struct MdFile { pub struct MdFile {
file_id: Uuid, pub file_id: Uuid,
file_name: String, pub file_name: String,
meta: Value, pub meta: Value,
content: String, pub content: String,
hash: String, pub hash: String,
} }
impl MdFile { impl MdFile {