(refactor) switched comments to right
This commit is contained in:
parent
756dd0a7fb
commit
da3dfe40b0
4 changed files with 40 additions and 40 deletions
26
src/db.rs
26
src/db.rs
|
|
@ -1,21 +1,21 @@
|
|||
// src/db.rs
|
||||
// Почему это здесь?
|
||||
// - Это всё, связанное с инициализацией и конфигурацией базы данных
|
||||
// - Здесь создаётся connection pool, который переиспользуется во всём приложении
|
||||
// src/db.rs
|
||||
// Почему это здесь?
|
||||
// - Это всё, связанное с инициализацией и конфигурацией базы данных
|
||||
// - Здесь создаётся connection pool, который переиспользуется во всём приложении
|
||||
|
||||
use sqlx::postgres::PgPoolOptions;
|
||||
use sqlx::PgPool;
|
||||
use std::env;
|
||||
|
||||
/// Инициализирует PgPool (connection pool для PostgreSQL)
|
||||
///
|
||||
/// Connection pool — это набор переиспользуемых соединений к БД.
|
||||
/// Вместо того, чтобы открывать новое соединение для каждого запроса,
|
||||
/// мы берём готовое соединение из пула.
|
||||
///
|
||||
/// Это **критически важно** для производительности:
|
||||
/// - Открытие соединения — медленная операция
|
||||
/// - Connection pool решает эту проблему
|
||||
/// Инициализирует PgPool (connection pool для PostgreSQL)
|
||||
///
|
||||
/// Connection pool — это набор переиспользуемых соединений к БД.
|
||||
/// Вместо того, чтобы открывать новое соединение для каждого запроса,
|
||||
/// мы берём готовое соединение из пула.
|
||||
///
|
||||
/// Это **критически важно** для производительности:
|
||||
/// - Открытие соединения — медленная операция
|
||||
/// - Connection pool решает эту проблему
|
||||
pub async fn init_pool() -> PgPool {
|
||||
let database_url = env::var("DATABASE_URL")
|
||||
.expect("DATABASE_URL must be set");
|
||||
|
|
|
|||
|
|
@ -13,16 +13,16 @@ use crate::state::AppState;
|
|||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// 1. Загружаем переменные окружения из .env или secrets (через sops)
|
||||
// 1. Загружаем переменные окружения из .env или secrets (через sops)
|
||||
dotenvy::dotenv().ok();
|
||||
|
||||
// 3. Создаём общее состояние приложения
|
||||
// 3. Создаём общее состояние приложения
|
||||
let app_state = AppState::new().await;
|
||||
|
||||
// 4. Конфигурируем роуты (все роуты централизованы в route::router())
|
||||
// 4. Конфигурируем роуты (все роуты централизованы в route::router())
|
||||
let app = route::router(app_state);
|
||||
|
||||
// 5. Запускаем сервер
|
||||
// 5. Запускаем сервер
|
||||
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
|
||||
println!("🚀 Server listening on {}", addr);
|
||||
|
||||
|
|
|
|||
22
src/route.rs
22
src/route.rs
|
|
@ -1,24 +1,24 @@
|
|||
// src/route.rs
|
||||
// Почему это здесь?
|
||||
// - Это центр управления всеми HTTP маршрутами (роутами)
|
||||
// - Здесь объявляются все подмодули (handlers, будущие сервисы и т.д.)
|
||||
// - Здесь собирается финальный Router для Axum
|
||||
// src/route.rs
|
||||
// Почему это здесь?
|
||||
// - Это центр управления всеми HTTP маршрутами (роутами)
|
||||
// - Здесь объявляются все подмодули (handlers, будущие сервисы и т.д.)
|
||||
// - Здесь собирается финальный Router для Axum
|
||||
|
||||
pub mod handlers; // Объявляем подмодуль handlers
|
||||
|
||||
use axum::{routing::get, Router};
|
||||
use crate::state::AppState;
|
||||
|
||||
/// Создаёт и возвращает Router со всеми сконфигурированными роутами
|
||||
/// Функция принимает AppState и передаёт его всем handlers'ам
|
||||
/// Создаёт и возвращает Router со всеми сконфигурированными роутами
|
||||
/// Функция принимает AppState и передаёт его всем handlers'ам
|
||||
pub fn router(app_state: AppState) -> Router {
|
||||
Router::new()
|
||||
// GET /api/health — health-check эндпоинт
|
||||
// GET /api/health — health-check эндпоинт
|
||||
.route("/api/health", get(handlers::health_handler))
|
||||
.route("/api/test-token", get(handlers::test_token_handler))
|
||||
// Сюда добавим новые роуты по мере разработки:
|
||||
// .route("/api/accounts", get(handlers::accounts::get_accounts))
|
||||
// .route("/api/payments", post(handlers::payments::create_payment))
|
||||
// Сюда добавим новые роуты по мере разработки:
|
||||
// .route("/api/accounts", get(handlers::accounts::get_accounts))
|
||||
// .route("/api/payments", post(handlers::payments::create_payment))
|
||||
|
||||
.with_state(app_state)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// src/route/handlers.rs
|
||||
// Почему это здесь?
|
||||
// - Это всё, что обрабатывает HTTP запросы
|
||||
// - Каждый handler'а — это async функция, которая обрабатывает запрос и возвращает ответ
|
||||
// src/route/handlers.rs
|
||||
// Почему это здесь?
|
||||
// - Это всё, что обрабатывает HTTP запросы
|
||||
// - Каждый handler'а — это async функция, которая обрабатывает запрос и возвращает ответ
|
||||
|
||||
use axum::{
|
||||
extract::State,
|
||||
|
|
@ -12,21 +12,21 @@ use axum::{
|
|||
use serde_json::json;
|
||||
use crate::state::AppState;
|
||||
|
||||
/// Health-check handler
|
||||
///
|
||||
/// Что он делает:
|
||||
/// 1. Принимает AppState через extract::State (это параметр, который Axum инжектирует)
|
||||
/// 2. Пытается выполнить простой SELECT 1 в БД (проверка подключения)
|
||||
/// 3. Возвращает 200 OK если всё хорошо, или 500 если БД недоступна
|
||||
/// Health-check handler
|
||||
///
|
||||
/// Что он делает:
|
||||
/// 1. Принимает AppState через extract::State (это параметр, который Axum инжектирует)
|
||||
/// 2. Пытается выполнить простой SELECT 1 в БД (проверка подключения)
|
||||
/// 3. Возвращает 200 OK если всё хорошо, или 500 если БД недоступна
|
||||
pub async fn health_handler(
|
||||
State(state): State<AppState>,
|
||||
) -> impl IntoResponse {
|
||||
// Пытаемся выполнить простой запрос к БД
|
||||
// Пытаемся выполнить простой запрос к БД
|
||||
let result = sqlx::query("SELECT 1")
|
||||
.execute(&state.db_pool)
|
||||
.await;
|
||||
|
||||
// Обрабатываем результат
|
||||
// Обрабатываем результат
|
||||
match result {
|
||||
Ok(_) => (
|
||||
StatusCode::OK,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue