38 lines
1.0 KiB
Rust
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(())
|
|
}
|