mod db; mod error; mod handlers; mod models; #[cfg(test)] mod tests; use axum::{Router, routing::get}; use dotenvy::dotenv; use sqlx::PgPool; fn router(pool: PgPool) -> Router { Router::new() .route("/health", get(handlers::health)) .route( "/measurements", get(handlers::list_measurements).post(handlers::create_measurement), ) .route( "/measurements/{id}", get(handlers::get_measurement) .put(handlers::update_measurement) .delete(handlers::delete_measurement), ) .route("/metric-types", get(handlers::metric_types)) .with_state(pool) } #[tokio::main] async fn main() -> anyhow::Result<()> { tracing_subscriber::fmt::init(); dotenv().ok(); let pool = db::connect().await?; let app = router(pool); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await?; tracing::info!("listening at 0.0.0.0:3000"); axum::serve(listener, app).await?; Ok(()) }