feat: add sqlx transaction extractor to router

This commit is contained in:
Alexander Navarro 2025-02-22 18:54:44 -03:00
parent cfaf7ecc1f
commit a662b94b21
8 changed files with 79 additions and 14 deletions

View file

@ -1,20 +1,37 @@
use axum::{extract::State, response::Html, routing::get, Router};
use chrono::Utc;
use minijinja::context;
use std::sync::Arc;
use serde::Serialize;
use sqlx::prelude::FromRow;
use tower_http::services::ServeDir;
use crate::{AppState, ResultTemplate};
use crate::{AppState, ResultTemplate, Tx};
pub fn new() -> Router<Arc<AppState>> {
pub fn new() -> Router<AppState> {
Router::new()
.route("/", get(handler_home))
.nest_service("/assets", ServeDir::new("dist/assets"))
}
async fn handler_home(State(state): State<Arc<AppState>>) -> ResultTemplate {
let template = state.tmpl_env.get_template("base.html")?;
#[derive(FromRow, Debug, Serialize)]
struct ExampleRow {
pub database: String,
pub version: String,
pub current_database: String,
pub current_user: String,
pub current_timestamp: chrono::DateTime<Utc>,
}
let content = template.render(context!())?;
async fn handler_home(State(state): State<AppState>, mut tx: Tx) -> ResultTemplate {
let template = state.tmpl_env.get_template("index.html")?;
let rows = sqlx::query_as::<_, ExampleRow>("select 'Postgres' as database, setting as version, current_database(), current_user, current_timestamp from pg_settings where name = 'server_version'")
.fetch_all(&mut tx)
.await?;
println!("{:?}", rows);
let content = template.render(context!(rows => rows))?;
Ok(Html(content))
}