gitdataai/lib/service/ai/provider.rs
2026-05-30 01:38:40 +08:00

48 lines
1.5 KiB
Rust

use crate::AppService;
use crate::ai::types::AiProviderResponse;
use crate::error::AppError;
use db::sqlx;
use model::ai::AiProviderModel;
use session::Session;
impl AppService {
pub async fn ai_provider_list(
&self,
ctx: &Session,
) -> Result<Vec<AiProviderResponse>, AppError> {
self.ai_require_login(ctx).await?;
let providers = sqlx::query_as::<_, AiProviderModel>(
"SELECT id, name, base_url, website_url, logo_url, enabled, created_at, updated_at \
FROM ai_provider WHERE enabled = true ORDER BY name ASC",
)
.fetch_all(self.db.reader())
.await
.map_err(|e| AppError::DatabaseError(e.to_string()))?;
Ok(providers
.into_iter()
.map(AiProviderResponse::from)
.collect())
}
pub async fn ai_provider_get(
&self,
ctx: &Session,
id: uuid::Uuid,
) -> Result<AiProviderResponse, AppError> {
self.ai_require_login(ctx).await?;
let provider = sqlx::query_as::<_, AiProviderModel>(
"SELECT id, name, base_url, website_url, logo_url, enabled, created_at, updated_at \
FROM ai_provider WHERE id = $1",
)
.bind(id)
.fetch_optional(self.db.reader())
.await
.map_err(|e| AppError::DatabaseError(e.to_string()))?
.ok_or(AppError::NotFound("provider not found".to_string()))?;
Ok(AiProviderResponse::from(provider))
}
}