huellas/src/main.rs
Felipe Contreras Salinas 644cdb92b0
chore(deps): Update to axum 0.7 (#37)
Reviewed-on: #37
Co-authored-by: Felipe Contreras Salinas <felipe@bstr.cl>
Co-committed-by: Felipe Contreras Salinas <felipe@bstr.cl>
2024-01-19 18:26:24 -03:00

53 lines
1.6 KiB
Rust

use anyhow::{Context, Result};
use axum::Router;
use sqlx::sqlite::SqlitePool;
use std::net::SocketAddr;
use tower_http::services::ServeDir;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
mod place;
mod routes;
#[tokio::main]
async fn main() -> Result<()> {
dotenvy::dotenv().unwrap_or_default();
tracing_subscriber::registry()
.with(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| "huellas=debug".into()),
)
.with(tracing_subscriber::fmt::layer())
.init();
let db_url = dotenvy::var("DATABASE_URL").context("DATABASE_URL not defined")?;
let pool = SqlitePool::connect(&db_url)
.await
.context("Couldn't connect to database")?;
sqlx::migrate!()
.run(&pool)
.await
.context("Couldn't run migrations")?;
let app = Router::new()
.nest("/places", routes::places_routes(pool))
.nest_service("/", ServeDir::new("static"));
let port = dotenvy::var("PORT").unwrap_or_default();
let port = str::parse(&port).unwrap_or(3000);
let address = SocketAddr::from(([0, 0, 0, 0], port));
tracing::debug!("listening on {}", address);
let listener = tokio::net::TcpListener::bind(address).await?;
axum::serve(listener, app.into_make_service())
.with_graceful_shutdown(shutdown_signal())
.await?;
Ok(())
}
async fn shutdown_signal() {
tokio::signal::ctrl_c()
.await
.expect("failed to listen for ctrl-c");
tracing::debug!("Received shutdown signal");
}