From da3dfe40b0289c2e8476c7f0bd3e62e243113e57 Mon Sep 17 00:00:00 2001 From: Rorik Star Platinum Date: Wed, 5 Nov 2025 21:48:35 +0300 Subject: [PATCH] (refactor) switched comments to right --- src/db.rs | 26 +++++++++++++------------- src/main.rs | 8 ++++---- src/route.rs | 22 +++++++++++----------- src/route/handlers.rs | 24 ++++++++++++------------ 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/db.rs b/src/db.rs index ccae23a..7e83020 100644 --- a/src/db.rs +++ b/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"); diff --git a/src/main.rs b/src/main.rs index 37f4dce..7dd790a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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); diff --git a/src/route.rs b/src/route.rs index 63c6da8..9c7ebca 100644 --- a/src/route.rs +++ b/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) } diff --git a/src/route/handlers.rs b/src/route/handlers.rs index 00a6648..0f8bce5 100644 --- a/src/route/handlers.rs +++ b/src/route/handlers.rs @@ -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, ) -> impl IntoResponse { - // Пытаемся выполнить простой запрос к БД + // Пытаемся выполнить простой запрос к БД let result = sqlx::query("SELECT 1") .execute(&state.db_pool) .await; - // Обрабатываем результат + // Обрабатываем результат match result { Ok(_) => ( StatusCode::OK,