2024-01-08 20:09:26 +02:00
|
|
|
use std::net::SocketAddr;
|
|
|
|
|
|
|
|
use axum::Router;
|
|
|
|
use dotenv::dotenv;
|
|
|
|
use tokio::net::TcpListener;
|
2024-01-11 16:48:54 +02:00
|
|
|
use tower_http::trace::TraceLayer;
|
|
|
|
use tower_http::{services::ServeDir, trace};
|
|
|
|
use tracing::Level;
|
|
|
|
use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
|
2024-01-08 20:09:26 +02:00
|
|
|
|
|
|
|
mod api;
|
|
|
|
mod db;
|
|
|
|
mod endpoints;
|
|
|
|
mod entity;
|
|
|
|
|
|
|
|
#[tokio::main(flavor = "multi_thread")]
|
|
|
|
async fn main() {
|
2024-01-11 14:26:34 +02:00
|
|
|
println!("Starting findtheti.me...");
|
|
|
|
|
2024-01-08 20:09:26 +02:00
|
|
|
dotenv().ok();
|
|
|
|
|
2024-01-11 16:48:54 +02:00
|
|
|
tracing_subscriber::registry()
|
|
|
|
.with(fmt::layer())
|
|
|
|
.with(EnvFilter::from_env("LOG_LEVEL"))
|
|
|
|
.init();
|
2024-01-08 20:09:26 +02:00
|
|
|
|
2024-01-11 16:48:54 +02:00
|
|
|
let api_routes = api::routes().await.expect("Unable to create api routes");
|
2024-01-09 17:23:40 +02:00
|
|
|
|
2024-01-11 16:48:54 +02:00
|
|
|
let mut routes = Router::new().nest("/api", api_routes);
|
2024-01-09 17:23:40 +02:00
|
|
|
|
|
|
|
// If in release mod, serve static files
|
|
|
|
if !cfg!(debug_assertions) {
|
2024-01-11 14:26:34 +02:00
|
|
|
println!("Initializing frontend routes...");
|
2024-01-11 16:48:54 +02:00
|
|
|
|
|
|
|
routes = routes
|
|
|
|
.nest_service("/", ServeDir::new("./frontend/dist"))
|
2024-01-09 17:23:40 +02:00
|
|
|
.fallback_service(ServeDir::new("./frontend/dist"));
|
|
|
|
}
|
2024-01-08 20:09:26 +02:00
|
|
|
|
2024-01-11 14:26:34 +02:00
|
|
|
println!("Routes initialized...");
|
|
|
|
|
2024-01-11 16:48:54 +02:00
|
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 8080));
|
2024-01-08 20:09:26 +02:00
|
|
|
|
|
|
|
let listener = TcpListener::bind(addr).await.unwrap();
|
|
|
|
|
2024-01-11 14:26:34 +02:00
|
|
|
println!("Starting server...");
|
|
|
|
|
2024-01-11 16:48:54 +02:00
|
|
|
axum::serve(
|
|
|
|
listener,
|
|
|
|
routes
|
|
|
|
.layer(
|
|
|
|
TraceLayer::new_for_http()
|
|
|
|
.make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
|
|
|
|
.on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
|
|
|
|
)
|
|
|
|
.into_make_service_with_connect_info::<SocketAddr>(),
|
|
|
|
)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
}
|