1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
use crate::database::search::search_request::SearchRequest; use diesel::{MysqlConnection, sql_query, RunQueryDsl}; use crate::database::search::search_response::SearchResponse; use crate::RpaError; use crate::database::search::validators::validate_request; use crate::database::search::utils::to_query_builder; pub mod fields; pub mod search_request; pub mod search_response; pub mod pagination; pub mod validators; pub mod utils; pub fn do_search<T>(request: SearchRequest, table_name: String, connection: &MysqlConnection) -> Result<SearchResponse<T>, RpaError> where T: diesel::deserialize::QueryableByName<diesel::mysql::Mysql> { validate_request(request.clone())?; let query_builder = to_query_builder(request.clone(), table_name); let query = query_builder.build(connection).unwrap(); let query_result = sql_query(query.sql.as_str()).load(connection); Ok(SearchResponse { results: query_result.unwrap(), total_pages: query.total_pages, page: query.page, page_size: query.page_size }) }