// src/main.rs mod route; mod db; mod state; mod api; use std::net::SocketAddr; use crate::state::AppState; /// Общее состояние приложения, передаётся во все handlers /// Это паттерн Axum: State используется в 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(); }