From d920230313107f424343fa8e72a816b82da47bd7 Mon Sep 17 00:00:00 2001 From: Zhazhazhu Date: Wed, 24 Jan 2024 01:30:03 +0800 Subject: [PATCH] feat: query client api --- crates/server/src/main.rs | 4 ++-- crates/server/src/persistence.rs | 20 ++++++++++---------- crates/server/src/routes.rs | 19 ++++++++----------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/crates/server/src/main.rs b/crates/server/src/main.rs index feb1b67..2981714 100644 --- a/crates/server/src/main.rs +++ b/crates/server/src/main.rs @@ -3,7 +3,7 @@ mod routes; use actix_cors::Cors; use actix_web::{http, web, App, HttpServer}; -use routes::{clients, clients_by_ip, ws_index}; +use routes::{clients, ws_index}; use std::env; #[actix_web::main] @@ -38,7 +38,7 @@ async fn main() -> std::io::Result<()> { .wrap(cors) .app_data(shared_data.clone()) .route("/ws", web::get().to(ws_index)) - .service(web::scope("/api").service(clients).service(clients_by_ip)) + .service(web::scope("/api").service(clients)) }) .workers(2) .bind(("0.0.0.0", 8080))? diff --git a/crates/server/src/persistence.rs b/crates/server/src/persistence.rs index bbd0079..008abc7 100644 --- a/crates/server/src/persistence.rs +++ b/crates/server/src/persistence.rs @@ -31,12 +31,12 @@ pub fn insert_service( websocket_key: String, ) -> mysql::error::Result { let insert_query = - format!("INSERT INTO {SERVICES_TABLE_NAME} (ip, links, websocket_key) VALUES (:ip, :links, :websocket_key)"); + format!("INSERT INTO {SERVICES_TABLE_NAME} (ip, link, websocket_key) VALUES (:ip, :link, :websocket_key)"); conn.exec_drop( insert_query, params! { "ip"=> ip, - "links" => link, + "link" => link, "websocket_key" => websocket_key }, ) @@ -49,7 +49,7 @@ pub fn insert_service( // websocket_key: String, // ) -> mysql::error::Result { // let update_query = format!( -// "UPDATE {SERVICES_TABLE_NAME} SET links = CONCAT(links, ',{}') WHERE websocket_key = :websocket_key", +// "UPDATE {SERVICES_TABLE_NAME} SET link = CONCAT(link, ',{}') WHERE websocket_key = :websocket_key", // link // ); // conn.exec_drop( @@ -66,23 +66,23 @@ pub struct Service { pub id: String, pub ip: String, pub websocket_key: String, - pub links: String, + pub link: String, } pub fn get_service( conn: &mut mysql::PooledConn, - ip: Option, + search: Option, ) -> Result, PersistenceError> { - let query_fn = |(id, ip, websocket_key, links)| Service { + let query_fn = |(id, ip, link, websocket_key)| Service { id, ip, + link, websocket_key, - links, }; - match ip { - Some(ip) => { - let select_query = format!("SELECT * FROM {SERVICES_TABLE_NAME} WHERE ip = '{ip}'"); + match search { + Some(search) => { + let select_query = format!("SELECT * FROM {SERVICES_TABLE_NAME} WHERE CONCAT(id, ip, link, websocket_key) LIKE '%{search}%'"); let data = conn.query_map(select_query, query_fn)?; Ok(data) } diff --git a/crates/server/src/routes.rs b/crates/server/src/routes.rs index e271119..00b481c 100644 --- a/crates/server/src/routes.rs +++ b/crates/server/src/routes.rs @@ -87,20 +87,17 @@ pub async fn ws_index( resp } -#[get("/client/{ip}")] -pub async fn clients( - path: web::Path, - data: web::Data, -) -> actix_web::Result { - let ip = path.into_inner(); - let mut conn = data.get_conn().unwrap(); - let services = web::block(move || get_service(&mut conn, Some(ip))).await??; - Ok(web::Json(services)) +#[derive(Deserialize)] +pub struct ClientQuery { + pub search: Option, } #[get("/client")] -pub async fn clients_by_ip(data: web::Data) -> actix_web::Result { +pub async fn clients( + query: web::Query, + data: web::Data, +) -> actix_web::Result { let mut conn = data.get_conn().unwrap(); - let services = web::block(move || get_service(&mut conn, None)).await??; + let services = web::block(move || get_service(&mut conn, query.search.clone())).await??; Ok(web::Json(services)) }