wip: change assets handling to vite-rs

This commit is contained in:
Alexander Navarro 2025-04-17 16:48:46 -04:00
parent 6cf98d1f1a
commit adbade7411
26 changed files with 761 additions and 112 deletions

View file

@ -1,3 +1,4 @@
use axum::http::StatusCode;
use axum::{
extract::{Path, State},
http::{header, HeaderMap, HeaderValue},
@ -10,8 +11,9 @@ use chrono::Utc;
use minijinja::context;
use serde::Serialize;
use sqlx::prelude::FromRow;
use vite_rs::ViteFile;
use crate::{AppState, Result, ResultTemplate, Tx};
use crate::{AppState, Error, Result, ResultTemplate, Tx};
pub fn new() -> Router<AppState> {
Router::new()
@ -21,19 +23,14 @@ pub fn new() -> Router<AppState> {
async fn handle_assets(
State(state): State<AppState>,
Path(asset): Path<String>,
Path(asset_path): Path<String>,
) -> Result<(HeaderMap, String)> {
let full_path = format!("frontend/assets/{}", asset_path);
let asset: ViteFile = state.assets.get_asset(&full_path).ok_or(Error::HTTP(StatusCode::NOT_FOUND))?;
let mut headers = HeaderMap::new();
headers.insert(header::CONTENT_TYPE, HeaderValue::from_str(&asset.content_type).unwrap());
let mime = mime_guess::from_path(&asset).first_raw();
if let Some(mime) = mime {
headers.insert(header::CONTENT_TYPE, HeaderValue::from_static(mime));
}
let template = state.tmpl_env.get_template(&format!("assets/{}", asset))?;
Ok((headers, template.render(context!())?))
Ok((headers, String::from_utf8(asset.bytes.to_vec()).unwrap()))
}
#[derive(FromRow, Debug, Serialize)]
@ -50,7 +47,7 @@ async fn handler_home(
HxRequest(hx_request): HxRequest,
mut tx: Tx,
) -> ResultTemplate {
let template = state.tmpl_env.get_template("index.html")?;
let template = state.assets.get_template("index.html").ok_or(Error::HTTP(StatusCode::NOT_FOUND))?;
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)