use decision_cockpit::{config::Config, http, state::AppState};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
init_tracing();
let config = Config::from_env()?;
let state = AppState::connect(&config.database_url).await?;
state.migrate().await?;
let app = http::router(state, &config);
let listener = tokio::net::TcpListener::bind(&config.api_bind_addr).await?;
tracing::info!(addr = %config.api_bind_addr, "HTTP API listening");
axum::serve(listener, app).await?;
Ok(())
}
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new("info,decision_cockpit=debug"));
tracing_subscriber::registry()
.with(filter)
.with(tracing_subscriber::fmt::layer())
.init();
}