31 lines
1,020 B
Rust
31 lines
1,020 B
Rust
// src/main.rs
|
||
mod route;
|
||
mod db;
|
||
mod state;
|
||
mod api;
|
||
|
||
use std::net::SocketAddr;
|
||
use crate::state::AppState;
|
||
|
||
|
||
/// Общее состояние приложения, передаётся во все handlers
|
||
/// Это паттерн Axum: State<AppState> используется в extract'ах
|
||
|
||
#[tokio::main]
|
||
async fn main() {
|
||
// 1. Загружаем переменные окружения из .env или secrets (через sops)
|
||
dotenvy::dotenv().ok();
|
||
|
||
// 3. Создаём общее состояние приложения
|
||
let app_state = AppState::new().await;
|
||
|
||
// 4. Конфигурируем роуты (все роуты централизованы в route::router())
|
||
let app = route::router(app_state);
|
||
|
||
// 5. Запускаем сервер
|
||
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
|
||
println!("🚀 Server listening on {}", addr);
|
||
|
||
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
|
||
axum::serve(listener, app).await.unwrap();
|
||
}
|