25dd0daa8b
- 所有 Rust crate 统一加 ias- 前缀:ai → ias-ai、common → ias-common、context → ias-context、mail → ias-mail、service → ias-service、wechat → ias-wechat - 新增 ias-main 模块承载 CLI 入口和二进制打包 - 各模块开始独立维护版本号,ias-main 0.1.7 代表整体版本 - 新增 IA_WEB_INTERNAL_URL 环境变量,版本通知同时发送公网和内网链接 - 将已有升级日志翻译为中文 - ias_upgrade_logs 新增 modules JSONB 字段 - 新增 VERSION 文件和 CHANGELOG.md - 新增 AGENTS.md 项目规则文件
57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
use sqlx::PgPool;
|
|
|
|
use crate::web::model::{NewWebPage, WebPage};
|
|
|
|
pub struct WebPageRepository;
|
|
|
|
impl WebPageRepository {
|
|
pub async fn create(pool: &PgPool, page: NewWebPage) -> anyhow::Result<WebPage> {
|
|
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<Option<WebPage>> {
|
|
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)
|
|
}
|
|
}
|