(refactor) switched comments to right

This commit is contained in:
Rorik Star Platinum 2025-11-05 21:48:35 +03:00
parent 756dd0a7fb
commit da3dfe40b0
4 changed files with 40 additions and 40 deletions

View file

@ -1,21 +1,21 @@
// src/db.rs // src/db.rs
// Почему это здесь? // Почему это здесь?
// - Это всё, связанное с инициализацией и конфигурацией базы данных // - Это всё, связанное с инициализацией и конфигурацией базы данных
// - Здесь создаётся connection pool, который переиспользуется во всём приложении // - Здесь создаётся connection pool, который переиспользуется во всём приложении
use sqlx::postgres::PgPoolOptions; use sqlx::postgres::PgPoolOptions;
use sqlx::PgPool; use sqlx::PgPool;
use std::env; use std::env;
/// Инициализирует PgPool (connection pool для PostgreSQL) /// Инициализирует PgPool (connection pool для PostgreSQL)
/// ///
/// Connection pool — это набор переиспользуемых соединений к БД. /// Connection pool — это набор переиспользуемых соединений к БД.
/// Вместо того, чтобы открывать новое соединение для каждого запроса, /// Вместо того, чтобы открывать новое соединение для каждого запроса,
/// мы берём готовое соединение из пула. /// мы берём готовое соединение из пула.
/// ///
/// Это **критически важно** для производительности: /// Это **критически важно** для производительности:
/// - Открытие соединения — медленная операция /// - Открытие соединения — медленная операция
/// - Connection pool решает эту проблему /// - Connection pool решает эту проблему
pub async fn init_pool() -> PgPool { pub async fn init_pool() -> PgPool {
let database_url = env::var("DATABASE_URL") let database_url = env::var("DATABASE_URL")
.expect("DATABASE_URL must be set"); .expect("DATABASE_URL must be set");

View file

@ -13,16 +13,16 @@ use crate::state::AppState;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
// 1. Загружаем переменные окружения из .env или secrets (через sops) // 1. Загружаем переменные окружения из .env или secrets (через sops)
dotenvy::dotenv().ok(); dotenvy::dotenv().ok();
// 3. Создаём общее состояние приложения // 3. Создаём общее состояние приложения
let app_state = AppState::new().await; let app_state = AppState::new().await;
// 4. Конфигурируем роуты (все роуты централизованы в route::router()) // 4. Конфигурируем роуты (все роуты централизованы в route::router())
let app = route::router(app_state); let app = route::router(app_state);
// 5. Запускаем сервер // 5. Запускаем сервер
let addr = SocketAddr::from(([0, 0, 0, 0], 3000)); let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
println!("🚀 Server listening on {}", addr); println!("🚀 Server listening on {}", addr);

View file

@ -1,24 +1,24 @@
// src/route.rs // src/route.rs
// Почему это здесь? // Почему это здесь?
// - Это центр управления всеми HTTP маршрутами (роутами) // - Это центр управления всеми HTTP маршрутами (роутами)
// - Здесь объявляются все подмодули (handlers, будущие сервисы и т.д.) // - Здесь объявляются все подмодули (handlers, будущие сервисы и т.д.)
// - Здесь собирается финальный Router для Axum // - Здесь собирается финальный Router для Axum
pub mod handlers; // Объявляем подмодуль handlers pub mod handlers; // Объявляем подмодуль handlers
use axum::{routing::get, Router}; use axum::{routing::get, Router};
use crate::state::AppState; use crate::state::AppState;
/// Создаёт и возвращает Router со всеми сконфигурированными роутами /// Создаёт и возвращает Router со всеми сконфигурированными роутами
/// Функция принимает AppState и передаёт его всем handlers'ам /// Функция принимает AppState и передаёт его всем handlers'ам
pub fn router(app_state: AppState) -> Router { pub fn router(app_state: AppState) -> Router {
Router::new() Router::new()
// GET /api/health — health-check эндпоинт // GET /api/health — health-check эндпоинт
.route("/api/health", get(handlers::health_handler)) .route("/api/health", get(handlers::health_handler))
.route("/api/test-token", get(handlers::test_token_handler)) .route("/api/test-token", get(handlers::test_token_handler))
// Сюда добавим новые роуты по мере разработки: // Сюда добавим новые роуты по мере разработки:
// .route("/api/accounts", get(handlers::accounts::get_accounts)) // .route("/api/accounts", get(handlers::accounts::get_accounts))
// .route("/api/payments", post(handlers::payments::create_payment)) // .route("/api/payments", post(handlers::payments::create_payment))
.with_state(app_state) .with_state(app_state)
} }

View file

@ -1,7 +1,7 @@
// src/route/handlers.rs // src/route/handlers.rs
// Почему это здесь? // Почему это здесь?
// - Это всё, что обрабатывает HTTP запросы // - Это всё, что обрабатывает HTTP запросы
// - Каждый handler'а — это async функция, которая обрабатывает запрос и возвращает ответ // - Каждый handler'а — это async функция, которая обрабатывает запрос и возвращает ответ
use axum::{ use axum::{
extract::State, extract::State,
@ -12,21 +12,21 @@ use axum::{
use serde_json::json; use serde_json::json;
use crate::state::AppState; use crate::state::AppState;
/// Health-check handler /// Health-check handler
/// ///
/// Что он делает: /// Что он делает:
/// 1. Принимает AppState через extract::State (это параметр, который Axum инжектирует) /// 1. Принимает AppState через extract::State (это параметр, который Axum инжектирует)
/// 2. Пытается выполнить простой SELECT 1 в БД (проверка подключения) /// 2. Пытается выполнить простой SELECT 1 в БД (проверка подключения)
/// 3. Возвращает 200 OK если всё хорошо, или 500 если БД недоступна /// 3. Возвращает 200 OK если всё хорошо, или 500 если БД недоступна
pub async fn health_handler( pub async fn health_handler(
State(state): State<AppState>, State(state): State<AppState>,
) -> impl IntoResponse { ) -> impl IntoResponse {
// Пытаемся выполнить простой запрос к БД // Пытаемся выполнить простой запрос к БД
let result = sqlx::query("SELECT 1") let result = sqlx::query("SELECT 1")
.execute(&state.db_pool) .execute(&state.db_pool)
.await; .await;
// Обрабатываем результат // Обрабатываем результат
match result { match result {
Ok(_) => ( Ok(_) => (
StatusCode::OK, StatusCode::OK,