feat: add search api route

This commit is contained in:
Alex Wellnitz 2024-02-12 22:55:24 +01:00
parent 87c5f3b000
commit 655b2df151
2 changed files with 20 additions and 1 deletions

View File

@ -1,4 +1,4 @@
use actix_web::{web, HttpResponse, Responder};
use actix_web::{web, HttpRequest, HttpResponse, Responder};
use serde::Deserialize;
use crate::types::app_state::AppStateWithSearchEngine;
@ -9,6 +9,12 @@ pub struct AddDocumentRequest {
content: String,
}
#[derive(Deserialize)]
pub struct QueryRequest {
query: String,
}
pub async fn add_document_to_index(data: web::Data<AppStateWithSearchEngine>, req: web::Json<AddDocumentRequest>) -> impl Responder {
data.search_engine.lock().unwrap().index(&req.url, &req.content);
HttpResponse::Created().body("Document added to index!")
@ -18,3 +24,15 @@ pub async fn get_number_of_documents(data: web::Data<AppStateWithSearchEngine>)
let number_of_documents = data.search_engine.lock().unwrap().number_of_documents();
HttpResponse::Ok().body(format!("Number of documents: {}", number_of_documents))
}
pub async fn search(data: web::Data<AppStateWithSearchEngine>, req: web::Query<QueryRequest>) -> impl Responder {
if req.query.is_empty() {
return HttpResponse::BadRequest().body("Query is empty");
}
// Get the query string from query parameters
log::debug!("Searching for: {}", &req.query);
let results = data.search_engine.lock().unwrap().search(&req.query);
HttpResponse::Ok().json(results)
}

View File

@ -38,6 +38,7 @@ async fn main() -> std::io::Result<()> {
"/search/index/number_of_documents",
web::get().to(search::get_number_of_documents),
)
.route("/search", web::get().to(search::search))
})
.bind(("127.0.0.1", 8080))?
.run()