38 lines
1.0 KiB
Rust

use sqlx::{
migrate::MigrateDatabase, postgres::PgPoolOptions, Connection, PgConnection, PgPool, Postgres,
};
pub async fn connect() -> Result<PgPool, sqlx::Error> {
tracing::info!("Initializing database connection");
let database_url =
dotenvy::var("DATABASE_URL").expect("`DATABASE_URL` environment variable not set");
let pool = PgPoolOptions::new()
.max_connections(5)
.connect(&database_url)
.await?;
Ok(pool)
}
pub async fn apply_migrations() -> Result<(), sqlx::Error> {
let uri = dotenvy::var("DATABASE_URL").expect("`DATABASE_URL` environment variable not set");
let uri = uri.as_str();
if !Postgres::database_exists(uri).await? {
tracing::info!("Creating database...");
Postgres::create_database(uri).await?;
}
tracing::info!("Applying migrations...");
let mut conn = PgConnection::connect(uri).await?;
sqlx::migrate!()
.run(&mut conn)
.await
.expect("Error while running database migrations");
Ok(())
}