Files
msgs/src/api/search.rs
T
2025-11-28 01:38:59 +07:00

49 lines
1.3 KiB
Rust

use crate::model;
use crate::state;
use axum::extract::{Json, Query, State};
use sqlx::Row;
use std::sync::Arc;
// New endpoint to search users
pub async fn search_users_handler(
State(state): State<Arc<state::AppState>>,
Query(params): Query<model::SearchQuery>,
// headers: axum::http::HeaderMap,
) -> Json<Vec<model::ChatPartner>> {
let search_pattern = format!("%{}%", params.q);
let users = sqlx::query(
r#"
SELECT username, phone, avatar_url
FROM users
WHERE (username LIKE ? OR phone LIKE ?)
LIMIT 20
"#,
)
.bind(&search_pattern)
.bind(&search_pattern)
.fetch_all(&state.db_pool)
.await;
match users {
Ok(rows) => {
let mut results = Vec::new();
for row in rows {
results.push(model::ChatPartner {
username: row.get("username"),
phone: row.get("phone"),
avatar_url: row.get("avatar_url"),
last_message: None,
last_message_time: None,
unread_count: 0,
});
}
Json(results)
}
Err(e) => {
eprintln!("Error searching users: {}", e);
Json(Vec::new())
}
}
}