2024-09-22 22:37:47 -04:00
|
|
|
use std::fs;
|
|
|
|
use std::path;
|
|
|
|
|
2024-09-22 04:10:29 -04:00
|
|
|
pub async fn import_posts(dir_path: &str, pool: &sqlx::Pool<sqlx::Postgres>) {
|
|
|
|
println!("hello from import_posts");
|
2024-09-22 22:37:47 -04:00
|
|
|
let entries = fs::read_dir(dir_path).unwrap();
|
|
|
|
let options = MarkdownOptions {
|
|
|
|
options: markdown::Constructs::gfm(),
|
|
|
|
};
|
2024-09-22 04:10:29 -04:00
|
|
|
|
|
|
|
for f in entries {
|
|
|
|
let file = f.unwrap();
|
|
|
|
let file_path = file.path();
|
|
|
|
if file_path.is_file() {
|
2024-09-22 22:37:47 -04:00
|
|
|
let file_name = file.file_name();
|
|
|
|
let file_name_final = &file_name.to_str().unwrap();
|
2024-09-22 04:10:29 -04:00
|
|
|
let exists = sqlx::query_as::<_, FilenameExists>(
|
|
|
|
"SELECT EXISTS(SELECT 1 FROM posts WHERE filename = $1)",
|
|
|
|
)
|
2024-09-22 22:37:47 -04:00
|
|
|
.bind(file_name_final)
|
2024-09-22 04:10:29 -04:00
|
|
|
.fetch_one(pool)
|
|
|
|
.await
|
|
|
|
.unwrap()
|
|
|
|
.filename;
|
|
|
|
|
|
|
|
if !exists.is_empty() {
|
2024-09-22 22:37:47 -04:00
|
|
|
println!(
|
|
|
|
"File does not exist! Inserting: {:?}",
|
|
|
|
file_path.file_name()
|
|
|
|
);
|
|
|
|
let file_md_contents = process_read_file(file_path, &options);
|
|
|
|
let content = markdown::to_html(&file_md_contents);
|
|
|
|
|
|
|
|
sqlx::query_as::<_, InsertPosts>(
|
|
|
|
"INSERT INTO posts (title, body, filename, author_id) VALUES ($1, $2, $3, $4) RETURNING (title, body, filename, author_id)",
|
|
|
|
)
|
|
|
|
.bind(String::from("Hello world from Postgres!"))
|
|
|
|
.bind(content)
|
|
|
|
.bind(file_name_final)
|
|
|
|
.bind(1)
|
|
|
|
.fetch_one(pool)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2024-09-22 04:10:29 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-22 22:37:47 -04:00
|
|
|
fn process_read_file<P: AsRef<path::Path>>(path: P, md_opts: &MarkdownOptions) -> String {
|
|
|
|
let file_contents = fs::read_to_string(path).unwrap();
|
|
|
|
markdown::to_html(file_contents.as_str())
|
|
|
|
}
|
|
|
|
|
2024-09-22 04:10:29 -04:00
|
|
|
#[derive(Debug, sqlx::FromRow)]
|
|
|
|
struct FilenameExists {
|
|
|
|
filename: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, sqlx::FromRow)]
|
|
|
|
struct InsertPosts {
|
|
|
|
title: String,
|
|
|
|
body: String,
|
2024-09-22 22:37:47 -04:00
|
|
|
filename: String,
|
|
|
|
author_id: i32,
|
|
|
|
}
|
|
|
|
|
|
|
|
struct MarkdownOptions {
|
|
|
|
options: markdown::Constructs,
|
2024-09-22 04:10:29 -04:00
|
|
|
}
|