(refactor) more clean architecture
This commit is contained in:
parent
0a45d6e139
commit
8a03bdee96
8 changed files with 278 additions and 53 deletions
40
src/route/handlers.rs
Normal file
40
src/route/handlers.rs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
// src/route/handlers.rs
|
||||
// Почему это здесь?
|
||||
// - Это всё, что обрабатывает HTTP запросы
|
||||
// - Каждый handler'а — это async функция, которая обрабатывает запрос и возвращает ответ
|
||||
|
||||
use axum::{
|
||||
extract::State,
|
||||
http::StatusCode,
|
||||
response::IntoResponse,
|
||||
Json,
|
||||
};
|
||||
use serde_json::json;
|
||||
use crate::AppState;
|
||||
|
||||
/// 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,
|
||||
Json(json!({ "status": "Database connection is successful." })),
|
||||
).into_response(),
|
||||
Err(e) => (
|
||||
StatusCode::INTERNAL_SERVER_ERROR,
|
||||
Json(json!({ "status": format!("Database connection failed: {}", e) })),
|
||||
).into_response(),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue