57 lines
1.1 KiB
Rust
57 lines
1.1 KiB
Rust
mod auth;
|
|
mod config;
|
|
mod database;
|
|
mod dto;
|
|
mod handlers;
|
|
mod middleware;
|
|
mod models;
|
|
mod repositories;
|
|
mod routes;
|
|
mod services;
|
|
|
|
use std::net::SocketAddr;
|
|
|
|
use axum::Router;
|
|
use sqlx::PgPool;
|
|
use tower_http::trace::TraceLayer;
|
|
|
|
use crate::config::AppConfig;
|
|
use crate::routes::create_router;
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
pub pool: PgPool,
|
|
pub config: AppConfig,
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
dotenvy::dotenv().ok();
|
|
|
|
tracing_subscriber::fmt::init();
|
|
|
|
let config = AppConfig::from_env();
|
|
|
|
let pool = database::init_db_pool(&config.database_url).await;
|
|
|
|
tracing::info!("Database connection established");
|
|
|
|
let state = AppState {
|
|
pool,
|
|
config: config.clone(),
|
|
};
|
|
|
|
let app: Router = create_router(state)
|
|
.layer(TraceLayer::new_for_http())
|
|
.layer(middleware::cors_layer());
|
|
|
|
let addr: SocketAddr = format!("{}:{}", config.host, config.port)
|
|
.parse()
|
|
.expect("Invalid host or port");
|
|
|
|
tracing::info!("CRM API server starting on {}", addr);
|
|
|
|
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
|
|
axum::serve(listener, app).await.unwrap();
|
|
}
|