From 509f8f7aeb6d873247e4e1ec126d55e66c321c7c Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Sun, 25 Feb 2024 12:50:19 +0100 Subject: [PATCH] Outsource db pool creation in preparation for unit tests --- .../store/migrations}/20231006125208_init.sql | 0 crates/store/src/sqlite_store.rs | 16 +++++++++++++++- src/main.rs | 15 ++------------- 3 files changed, 17 insertions(+), 14 deletions(-) rename {migrations => crates/store/migrations}/20231006125208_init.sql (100%) diff --git a/migrations/20231006125208_init.sql b/crates/store/migrations/20231006125208_init.sql similarity index 100% rename from migrations/20231006125208_init.sql rename to crates/store/migrations/20231006125208_init.sql diff --git a/crates/store/src/sqlite_store.rs b/crates/store/src/sqlite_store.rs index 8d5a572..354b1aa 100644 --- a/crates/store/src/sqlite_store.rs +++ b/crates/store/src/sqlite_store.rs @@ -1,6 +1,6 @@ use anyhow::Result; use async_trait::async_trait; -use sqlx::SqlitePool; +use sqlx::{sqlite::SqliteConnectOptions, Pool, Sqlite, SqlitePool}; use crate::{ calendar::{Calendar, CalendarStore}, @@ -111,3 +111,17 @@ impl CalendarStore for SqliteCalendarStore { Ok(()) } } + +pub async fn create_db_pool(db_url: &str, migrate: bool) -> anyhow::Result>{ + let db = SqlitePool::connect_with( + SqliteConnectOptions::new() + .filename(db_url) + .create_if_missing(true), + ) + .await?; + if migrate { + println!("Running database migrations"); + sqlx::migrate!("./migrations").run(&db).await?; + } + Ok(db) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e74fd4e..6740007 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,10 +6,8 @@ use clap::Parser; use config::{CalendarStoreConfig, SqliteCalendarStoreConfig, TomlCalendarStoreConfig}; use rustical_auth::AuthProvider; use rustical_store::calendar::CalendarStore; -use rustical_store::sqlite_store::SqliteCalendarStore; +use rustical_store::sqlite_store::{create_db_pool, SqliteCalendarStore}; use rustical_store::toml_store::TomlCalendarStore; -use sqlx::sqlite::SqliteConnectOptions; -use sqlx::SqlitePool; use std::fs; use std::sync::Arc; use tokio::sync::RwLock; @@ -38,16 +36,7 @@ async fn get_cal_store( })) } CalendarStoreConfig::Sqlite(SqliteCalendarStoreConfig { db_url }) => { - let db = SqlitePool::connect_with( - SqliteConnectOptions::new() - .filename(db_url) - .create_if_missing(true), - ) - .await?; - if migrate { - println!("Running database migrations"); - sqlx::migrate!("./migrations").run(&db).await?; - } + let db = create_db_pool(db_url, migrate).await?; Arc::new(RwLock::new(SqliteCalendarStore::new(db))) } };