mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 20:23:43 +08:00
refactor(opensearch): Add Error Handling for Empty Query and Filters in Request (#5432)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -71,6 +71,8 @@ pub enum OpenSearchError {
|
||||
ConnectionError,
|
||||
#[error("Opensearch NON-200 response content: '{0}'")]
|
||||
ResponseNotOK(String),
|
||||
#[error("Opensearch bad request error")]
|
||||
BadRequestError(String),
|
||||
#[error("Opensearch response error")]
|
||||
ResponseError,
|
||||
#[error("Opensearch query building error")]
|
||||
@ -98,6 +100,9 @@ impl ErrorSwitch<ApiErrorResponse> for OpenSearchError {
|
||||
"Connection error",
|
||||
None,
|
||||
)),
|
||||
Self::BadRequestError(response) => {
|
||||
ApiErrorResponse::BadRequest(ApiError::new("IR", 1, response.to_string(), None))
|
||||
}
|
||||
Self::ResponseNotOK(response) => ApiErrorResponse::InternalServerError(ApiError::new(
|
||||
"IR",
|
||||
1,
|
||||
|
||||
@ -16,6 +16,17 @@ pub async fn msearch_results(
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
indexes: Vec<SearchIndex>,
|
||||
) -> CustomResult<Vec<GetSearchResponse>, OpenSearchError> {
|
||||
if req.query.trim().is_empty()
|
||||
&& req
|
||||
.filters
|
||||
.as_ref()
|
||||
.map_or(true, |filters| filters.is_all_none())
|
||||
{
|
||||
return Err(OpenSearchError::BadRequestError(
|
||||
"Both query and filters are empty".to_string(),
|
||||
)
|
||||
.into());
|
||||
}
|
||||
let mut query_builder =
|
||||
OpenSearchQueryBuilder::new(OpenSearchQuery::Msearch(indexes.clone()), req.query);
|
||||
|
||||
|
||||
@ -10,6 +10,15 @@ pub struct SearchFilters {
|
||||
pub customer_email: Option<Vec<HashedString<common_utils::pii::EmailStrategy>>>,
|
||||
pub search_tags: Option<Vec<HashedString<WithType>>>,
|
||||
}
|
||||
impl SearchFilters {
|
||||
pub fn is_all_none(&self) -> bool {
|
||||
self.payment_method.is_none()
|
||||
&& self.currency.is_none()
|
||||
&& self.status.is_none()
|
||||
&& self.customer_email.is_none()
|
||||
&& self.search_tags.is_none()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
||||
Reference in New Issue
Block a user