38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
use sqlx;
|
|
use sqlx::sqlite::SqlitePool;
|
|
use std::sync::Arc;
|
|
use crate::errors::NoteStoreError;
|
|
use crate::structs::RawPage;
|
|
|
|
/// A handle to our Sqlite database.
|
|
#[derive(Clone)]
|
|
pub struct NoteStore(Arc<SqlitePool>);
|
|
|
|
type NoteResult<T> = core::result::Result<T, NoteStoreError>;
|
|
type SqlResult<T> = sqlx::Result<T>;
|
|
|
|
impl NoteStore {
|
|
pub async fn new(url: &str) -> NoteResult<Self> {
|
|
let pool = SqlitePool::connect(url).await?;
|
|
Ok(NoteStore(Arc::new(pool)))
|
|
}
|
|
|
|
/// This will erase all the data in the database. Only use this
|
|
/// if you're sure that's what you want.
|
|
pub async fn reset_database(&self) -> NoteResult<()> {
|
|
let initialize_sql = include_str!("sql/initialize_database.sql");
|
|
sqlx::query(initialize_sql)
|
|
.execute(&*self.0)
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn fetch_page(&self, id: &str) -> SqlResult<RawPage> {
|
|
let select_one_page_sql = include_str!("sql/select_one_page.sql");
|
|
sqlx::query_as(select_one_page_sql)
|
|
.bind(&id)
|
|
.fetch_one(&*self.0)
|
|
.await
|
|
}
|
|
}
|