Run SQLx migrations at startup

Add an initial services table migration and enable the sqlx
"migrate" feature. Introduce run_migrations in db.rs, run
migrations on startup, and pass the PgPool into the router.
This commit is contained in:
2026-01-16 10:35:45 +01:00
parent 4b36cd83a1
commit 36124043b6
5 changed files with 47 additions and 6 deletions

View File

@@ -1,6 +1,16 @@
use crate::config::CONFIG;
use sqlx::{postgres::PgPoolOptions, PgPool};
use tracing::info;
pub async fn run_migrations(pool: &PgPool) {
info!("Running database migrations...");
sqlx::migrate!("./migrations")
.run(pool)
.await
.expect("Failed to run migrations");
info!("Database migrations completed successfully");
}
pub async fn get_pg_pool() -> PgPool {
let database_url: String = format!(

View File

@@ -10,7 +10,13 @@ use tracing_subscriber::{filter, layer::SubscriberExt, util::SubscriberInitExt};
use std::{net::SocketAddr, str::FromStr};
async fn start_app() {
let app = views::get_router().await;
// Initialize database pool
let pool = db::get_pg_pool().await;
// Run migrations
db::run_migrations(&pool).await;
let app = views::get_router(pool).await;
let addr = SocketAddr::from(([0, 0, 0, 0], 8080));

View File

@@ -13,7 +13,7 @@ use sqlx::PgPool;
use tower_http::trace::{self, TraceLayer};
use tracing::Level;
use crate::{config::CONFIG, db::get_pg_pool};
use crate::config::CONFIG;
pub type Database = Extension<PgPool>;
@@ -218,9 +218,7 @@ async fn auth(req: Request<axum::body::Body>, next: Next) -> Result<Response, St
Ok(next.run(req).await)
}
pub async fn get_router() -> Router {
let client = get_pg_pool().await;
pub async fn get_router(client: PgPool) -> Router {
let (prometheus_layer, metric_handle) = PrometheusMetricLayer::pair();
let app_router = Router::new()