Skip to main content

systemprompt_api/routes/content/
query.rs

1//! Content search endpoint over `SearchService`.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use axum::extract::State;
7use axum::{Extension, Json};
8use systemprompt_content::{SearchRequest, SearchResponse, SearchService};
9use systemprompt_models::RequestContext;
10use systemprompt_runtime::AppContext;
11
12use crate::error::ApiHttpError;
13
14pub async fn query_handler(
15    Extension(_req_ctx): Extension<RequestContext>,
16    State(ctx): State<AppContext>,
17    Json(request): Json<SearchRequest>,
18) -> Result<Json<SearchResponse>, ApiHttpError> {
19    tracing::info!(query = %request.query, "Searching");
20
21    let repositories = ctx.content_repositories();
22    let search_service =
23        SearchService::new(repositories.search.clone(), repositories.content.clone());
24
25    let response = search_service.search(&request).await?;
26    tracing::info!(total = response.total, "Search completed");
27    Ok(Json(response))
28}