tdm_server_rust/web/
search_controller.rs1use crate::{
6 app::AppState,
7 common::result::ResultBody,
8 entity::search::{GlobalSearchQuery, GlobalSearchResponse},
9 error::ApiResult,
10 middleware::AuthMember,
11 service::search_service::SearchService,
12};
13use axum::{
14 extract::{Extension, Query, State},
15 routing::get,
16 Router,
17};
18
19pub fn routes() -> Router<AppState> {
21 Router::new().route("/", get(global_search))
22}
23
24#[tracing::instrument(skip_all, level = "info")]
26pub async fn global_search(
27 State(state): State<AppState>,
28 Extension(AuthMember(member)): Extension<AuthMember>,
29 Query(query): Query<GlobalSearchQuery>,
30) -> ApiResult<ResultBody<GlobalSearchResponse>> {
31 let member = member.ok_or_else(|| crate::error::AppError::login_expired("请先登录再搜索喵"))?;
32 let data = SearchService::search(&state, query, Some(member)).await?;
33 Ok(ResultBody::success_data(data))
34}