27 lines
756 B
Rust
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)
|
|
}
|
|
}
|