huellas/src/main.rs
Felipe Contreras Salinas 579ed9fe34
Refactors and TODOs: (#27)
- Use anyhow for setup errors
- Implement comparison agaisnt db in insert test
- Crate updates

Reviewed-on: #27
Co-authored-by: Felipe Contreras Salinas <felipe@bstr.cl>
Co-committed-by: Felipe Contreras Salinas <felipe@bstr.cl>
2023-08-04 23:46:34 -04:00

53 lines
1.5 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);
axum::Server::bind(&address)
.serve(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");
}