vanikam/src/db/sqlx_postgres.rs

53 lines
1.2 KiB
Rust

// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
use sqlx::migrate::MigrateDatabase;
use sqlx::postgres::PgPool;
use super::migrate::RunMigrations;
#[derive(Clone)]
pub struct Postgres {
pub pool: PgPool,
}
impl Postgres {
pub fn new(pool: PgPool) -> Self {
Self { pool }
}
pub async fn init(database_url: &str) -> Self {
let pool = PgPool::connect(database_url).await.unwrap();
Self::new(pool)
}
}
#[async_trait::async_trait]
impl RunMigrations for Postgres {
async fn migrate(&self) {
sqlx::migrate!("./migrations/")
.run(&self.pool)
.await
.unwrap();
}
}
pub struct PostgresDatabase;
#[async_trait::async_trait]
impl super::create_database::CreateDatabase for PostgresDatabase {
async fn create_database(&self, url: &url::Url) {
sqlx::Postgres::create_database(url.as_str()).await.unwrap();
}
}
#[async_trait::async_trait]
impl super::delete_database::DeleteDatabase for PostgresDatabase {
async fn delete_database(&self, url: &url::Url) {
sqlx::Postgres::force_drop_database(url.as_str())
.await
.unwrap();
}
}