diff --git a/src/db/mod.rs b/src/db/mod.rs index 6c120ee..0c93318 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -1,10 +1,11 @@ +#![allow(unused)] use log::{info, warn}; -use sqlx::{migrate::MigrateDatabase, Sqlite, SqlitePool}; +use sqlx::{migrate::MigrateDatabase, PgPool, Postgres, Sqlite, SqlitePool}; #[derive(Clone)] pub enum DataBase { Sqlite(sqlx::Pool), - //Postgres(sqlx::Pool), + Postgres(sqlx::Pool), } impl DataBase { @@ -28,4 +29,25 @@ impl DataBase { Self::Sqlite(pool) } + + pub async fn postgres(url: &str) -> Self { + if !sqlx::Postgres::database_exists(url) + .await + .expect("failed to connect to db") + { + warn!("No Postgres database found, if this is the first time you are starting Gunnhildr, you can safely ignore this."); + sqlx::Postgres::create_database(url) + .await + .expect("failed to create Postgres Database!"); + info!("Created new Postgres Database"); + } + + let pool = PgPool::connect("url").await.unwrap(); + sqlx::migrate!("migrations/postgres") + .run(&pool) + .await + .expect("Failed to apply migration!"); + + Self::Postgres(pool) + } }