use dotenv::dotenv; use std::env; use tracing::info; use tracing_subscriber::layer::SubscriberExt; mod db; mod errors; mod handlers; mod models; #[tokio::main(flavor = "current_thread")] async fn main() { //Parse .env file and add the environmental variables configured there dotenv().ok(); let subscriber = tracing_subscriber::registry() .with(tracing_subscriber::EnvFilter::new( std::env::var("INTRASYS_LOG").unwrap_or_else(|_| "info".into()), )) .with(tracing_subscriber::fmt::layer()); tracing::subscriber::set_global_default(subscriber) .expect("Failed to set the global tracing subscriber"); let pool = db::create_pool().await.expect("Failed to create pool"); // Run migrations db::run_migrations(&pool) .await .expect("Failed to run migrations"); // Build the application's routes let app = handlers::create_router(pool); // Run the server let host = env::var("INTRASYS_HOST").unwrap_or(String::from("127.0.0.1")); let port = env::var("INTRASYS_PORT").unwrap_or(String::from("8080")); let listener = tokio::net::TcpListener::bind(format!("{host}:{port}")) .await .unwrap(); info!("listening on {}", listener.local_addr().unwrap()); axum::serve(listener, app).await.unwrap(); } #[cfg(test)] mod tests;