use sqlx::PgPool; use crate::web::model::{NewWebPage, WebPage}; pub struct WebPageRepository; impl WebPageRepository { pub async fn create(pool: &PgPool, page: NewWebPage) -> anyhow::Result { let row = sqlx::query_as::<_, WebPage>( r#" INSERT INTO ias_web_pages ( slug, page_type, title, summary, content, source_label, metadata ) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id, slug, page_type, title, summary, content, source_label, metadata, created_at "#, ) .bind(page.slug) .bind(page.page_type) .bind(page.title) .bind(page.summary) .bind(page.content) .bind(page.source_label) .bind(page.metadata) .fetch_one(pool) .await?; Ok(row) } pub async fn find_by_type_and_slug( pool: &PgPool, page_type: &str, slug: &str, ) -> anyhow::Result> { let row = sqlx::query_as::<_, WebPage>( r#" SELECT id, slug, page_type, title, summary, content, source_label, metadata, created_at FROM ias_web_pages WHERE page_type = $1 AND slug = $2 "#, ) .bind(page_type) .bind(slug) .fetch_optional(pool) .await?; Ok(row) } }