mirror of
https://github.com/Xevion/xevion.dev.git
synced 2026-02-01 12:26:47 -06:00
refactor: reorganize Rust codebase into modular handlers and database layers
- 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
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
pub mod projects;
|
||||
pub mod settings;
|
||||
pub mod tags;
|
||||
|
||||
// Re-export all types and functions
|
||||
pub use projects::*;
|
||||
pub use settings::*;
|
||||
pub use tags::*;
|
||||
|
||||
use sqlx::{PgPool, postgres::PgPoolOptions};
|
||||
|
||||
/// Database connection pool creation
|
||||
pub async fn create_pool(database_url: &str) -> Result<PgPool, sqlx::Error> {
|
||||
PgPoolOptions::new()
|
||||
.max_connections(20)
|
||||
.acquire_timeout(std::time::Duration::from_secs(3))
|
||||
.connect(database_url)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Health check query
|
||||
pub async fn health_check(pool: &PgPool) -> Result<(), sqlx::Error> {
|
||||
sqlx::query!("SELECT 1 as check")
|
||||
.fetch_one(pool)
|
||||
.await
|
||||
.map(|_| ())
|
||||
}
|
||||
|
||||
/// Slugify text for URL-safe identifiers
|
||||
pub fn slugify(text: &str) -> String {
|
||||
text.to_lowercase()
|
||||
.chars()
|
||||
.map(|c| {
|
||||
if c.is_alphanumeric() {
|
||||
c
|
||||
} else if c.is_whitespace() || c == '-' || c == '_' {
|
||||
'-'
|
||||
} else {
|
||||
'\0'
|
||||
}
|
||||
})
|
||||
.collect::<String>()
|
||||
.split('-')
|
||||
.filter(|s| !s.is_empty())
|
||||
.collect::<Vec<_>>()
|
||||
.join("-")
|
||||
}
|
||||
|
||||
/// Project status enum
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, sqlx::Type, serde::Serialize, serde::Deserialize)]
|
||||
#[sqlx(type_name = "project_status", rename_all = "lowercase")]
|
||||
pub enum ProjectStatus {
|
||||
Active,
|
||||
Maintained,
|
||||
Archived,
|
||||
Hidden,
|
||||
}
|
||||
Reference in New Issue
Block a user