49 lines
1.3 KiB
Rust
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())
|
|
}
|
|
}
|
|
}
|