(refactor) more clean architecture
This commit is contained in:
parent
0a45d6e139
commit
8a03bdee96
8 changed files with 278 additions and 53 deletions
68
src/main.rs
68
src/main.rs
|
|
@ -1,64 +1,36 @@
|
|||
// Подключаем модули напрямую без mod.rs!
|
||||
mod banking {
|
||||
pub mod client;
|
||||
pub mod models;
|
||||
pub mod error;
|
||||
}
|
||||
// src/main.rs
|
||||
mod route; // Объявляем модуль route (это либо route.rs, либо route/mod.rs)
|
||||
mod db; // Объявляем модуль для работы с БД
|
||||
|
||||
mod services {
|
||||
pub mod account_service;
|
||||
pub mod consent_service;
|
||||
}
|
||||
|
||||
mod handlers {
|
||||
pub mod health;
|
||||
pub mod accounts;
|
||||
}
|
||||
|
||||
mod config;
|
||||
mod db;
|
||||
mod error;
|
||||
|
||||
use axum::{
|
||||
routing::get,
|
||||
Router,
|
||||
};
|
||||
use std::net::SocketAddr;
|
||||
use sqlx::PgPool;
|
||||
|
||||
/// Общее состояние приложения, передаётся во все handlers
|
||||
/// Это паттерн Axum: State<AppState> используется в extract'ах
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
pub db_pool: PgPool,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// 1. Загружаем переменные окружения из .env или secrets (через sops)
|
||||
dotenvy::dotenv().ok();
|
||||
|
||||
// 2. Инициализируем базу данных
|
||||
let db_pool = db::init_pool().await;
|
||||
|
||||
let banking_clients = banking::client::init_all_banks().await;
|
||||
println!("✅ Database connection pool created successfully.");
|
||||
|
||||
let app_state = AppState {
|
||||
db_pool,
|
||||
banking_clients,
|
||||
};
|
||||
// 3. Создаём общее состояние приложения
|
||||
let app_state = AppState { db_pool };
|
||||
|
||||
let app = Router::new()
|
||||
.route("/api/health", get(handlers::health::health_handler))
|
||||
.route("/api/accounts/aggregated", get(handlers::accounts::get_aggregated_accounts))
|
||||
.with_state(app_state);
|
||||
// 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();
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
pub db_pool: sqlx::PgPool,
|
||||
pub banking_clients: BankingClients,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct BankingClients {
|
||||
pub vbank: banking::client::BankClient,
|
||||
pub abank: banking::client::BankClient,
|
||||
pub sbank: banking::client::BankClient,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue