2023-08-04 23:46:34 -04:00
|
|
|
use anyhow::{Context, Result};
|
2023-04-01 23:16:36 -04:00
|
|
|
use axum::Router;
|
|
|
|
|
use sqlx::sqlite::SqlitePool;
|
|
|
|
|
use std::net::SocketAddr;
|
|
|
|
|
use tower_http::services::ServeDir;
|
|
|
|
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
2022-07-17 17:04:48 -04:00
|
|
|
|
|
|
|
|
mod place;
|
|
|
|
|
mod routes;
|
|
|
|
|
|
2023-04-01 23:16:36 -04:00
|
|
|
#[tokio::main]
|
2023-08-04 23:46:34 -04:00
|
|
|
async fn main() -> Result<()> {
|
2023-04-01 23:16:36 -04:00
|
|
|
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();
|
|
|
|
|
|
2023-08-04 23:46:34 -04:00
|
|
|
let db_url = dotenvy::var("DATABASE_URL").context("DATABASE_URL not defined")?;
|
2023-04-01 23:16:36 -04:00
|
|
|
let pool = SqlitePool::connect(&db_url)
|
|
|
|
|
.await
|
2023-08-04 23:46:34 -04:00
|
|
|
.context("Couldn't connect to database")?;
|
2023-04-01 23:16:36 -04:00
|
|
|
|
|
|
|
|
sqlx::migrate!()
|
|
|
|
|
.run(&pool)
|
|
|
|
|
.await
|
2023-08-04 23:46:34 -04:00
|
|
|
.context("Couldn't run migrations")?;
|
2023-04-01 23:16:36 -04:00
|
|
|
|
|
|
|
|
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);
|
2024-01-19 18:26:24 -03:00
|
|
|
let listener = tokio::net::TcpListener::bind(address).await?;
|
|
|
|
|
axum::serve(listener, app.into_make_service())
|
2023-04-01 23:16:36 -04:00
|
|
|
.with_graceful_shutdown(shutdown_signal())
|
2023-08-04 23:46:34 -04:00
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
2023-04-01 23:16:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn shutdown_signal() {
|
|
|
|
|
tokio::signal::ctrl_c()
|
|
|
|
|
.await
|
2023-08-04 23:46:34 -04:00
|
|
|
.expect("failed to listen for ctrl-c");
|
|
|
|
|
tracing::debug!("Received shutdown signal");
|
2022-07-17 17:04:48 -04:00
|
|
|
}
|