mirror of
https://github.com/Xevion/xevion.dev.git
synced 2026-02-01 12:26:47 -06:00
- Split monolithic src/db.rs (1122 lines) into domain modules: projects, tags, settings - Extract API handlers from main.rs into separate handler modules by domain - Add proxy module for ISR/SSR coordination with Bun process - Introduce AppState for shared application context - Add utility functions for asset serving and request classification - Remove obsolete middleware/auth.rs in favor of session checks in handlers
55 lines
1.9 KiB
Rust
55 lines
1.9 KiB
Rust
use axum::{Json, extract::State, http::StatusCode, response::IntoResponse};
|
|
use std::sync::Arc;
|
|
|
|
use crate::{auth, db, state::AppState};
|
|
|
|
/// Get site settings (public endpoint)
|
|
pub async fn get_settings_handler(State(state): State<Arc<AppState>>) -> impl IntoResponse {
|
|
match db::get_site_settings(&state.pool).await {
|
|
Ok(settings) => Json(settings).into_response(),
|
|
Err(err) => {
|
|
tracing::error!(error = %err, "Failed to fetch site settings");
|
|
(
|
|
StatusCode::INTERNAL_SERVER_ERROR,
|
|
Json(serde_json::json!({
|
|
"error": "Internal server error",
|
|
"message": "Failed to fetch settings"
|
|
})),
|
|
)
|
|
.into_response()
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Update site settings (requires authentication)
|
|
pub async fn update_settings_handler(
|
|
State(state): State<Arc<AppState>>,
|
|
jar: axum_extra::extract::CookieJar,
|
|
Json(payload): Json<db::UpdateSiteSettingsRequest>,
|
|
) -> impl IntoResponse {
|
|
// Check authentication
|
|
if auth::check_session(&state, &jar).is_none() {
|
|
return auth::require_auth_response().into_response();
|
|
}
|
|
|
|
match db::update_site_settings(&state.pool, &payload).await {
|
|
Ok(settings) => {
|
|
// TODO: Invalidate ISR cache for homepage and affected routes when ISR is implemented
|
|
// TODO: Add event log entry for settings update when events table is implemented
|
|
tracing::info!("Site settings updated");
|
|
Json(settings).into_response()
|
|
}
|
|
Err(err) => {
|
|
tracing::error!(error = %err, "Failed to update site settings");
|
|
(
|
|
StatusCode::INTERNAL_SERVER_ERROR,
|
|
Json(serde_json::json!({
|
|
"error": "Internal server error",
|
|
"message": "Failed to update settings"
|
|
})),
|
|
)
|
|
.into_response()
|
|
}
|
|
}
|
|
}
|