mabel/src/database/page.rs

27 lines
756 B
Rust

use async_trait::async_trait;
use crate::content::{
self,
page::{Page, PageRepository},
};
use super::Database;
#[async_trait]
impl PageRepository for Database {
async fn get_page_from_url(&self, site: &str, slug: &str) -> Result<Page, content::Error> {
let page_query = sqlx::query_as(
"SELECT pages.* FROM pages JOIN sites ON site = sites.id WHERE slug = $1 AND name = $2 AND pages.deleted_at IS NULL AND sites.deleted_at IS NULL")
.bind(slug)
.bind(site);
let page: Page = page_query
.fetch_one(&self.pool)
.await
.map_err(|e| match e {
sqlx::Error::RowNotFound => content::Error::NotFound,
_ => e.into(),
})?;
Ok(page)
}
}