26 lines
669 B
Rust
26 lines
669 B
Rust
use axum::{
|
|
extract::{Path, State},
|
|
routing::get,
|
|
Router,
|
|
};
|
|
use std::sync::Arc;
|
|
|
|
use crate::{content::Page, error::AppError, state::AppState};
|
|
|
|
async fn get_page(
|
|
State(state): State<Arc<AppState>>,
|
|
Path((site, slug)): Path<(String, String)>,
|
|
) -> Result<String, AppError<'static>> {
|
|
let page_query = sqlx::query_as(
|
|
"SELECT p.* FROM pages p JOIN sites s ON p.site = s.id WHERE p.slug = $1 AND s.name = $2",
|
|
)
|
|
.bind(slug)
|
|
.bind(site);
|
|
let page: Page = page_query.fetch_one(&state.database).await?;
|
|
Ok(page.title)
|
|
}
|
|
|
|
pub fn router() -> Router<Arc<AppState>> {
|
|
Router::new().route("/:site/:slug", get(get_page))
|
|
}
|