use crate::api::gateway::contracts::GatewayRequestCondition;
use crate::parser::query_builder::Condition;
use crate::utils::format::normalize_column_name;
pub type RequestCondition = GatewayRequestCondition;
pub fn to_query_conditions(
conditions: &[RequestCondition],
convert_camel_case: bool,
auto_cast_uuid_filter_values_to_text: bool,
) -> Vec<Condition> {
conditions
.iter()
.map(|condition: &RequestCondition| {
let column_name: String =
normalize_column_name(&condition.eq_column, convert_camel_case);
Condition::eq(column_name, condition.eq_value.clone())
.with_uuid_value_text_cast(auto_cast_uuid_filter_values_to_text)
})
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn forced_normalization_converts_camel_case_condition_columns() {
let conditions = vec![
RequestCondition::new(
"organizationId".into(),
json!("544d9c97-1c3f-4742-a100-e5430bd79b7f"),
),
RequestCondition::new("userId".into(), json!("aXHOWHWj5btNEhmZ53XAhDvIaS7n1nxt")),
];
let pg: Vec<Condition> = to_query_conditions(&conditions, true, false);
assert_eq!(pg[0].column, "organization_id");
assert_eq!(pg[1].column, "user_id");
}
#[test]
fn without_forcing_conditions_keep_original_names() {
let conditions = vec![RequestCondition::new("organizationId".into(), json!("x"))];
let pg: Vec<Condition> = to_query_conditions(&conditions, false, false);
assert_eq!(pg[0].column, "organizationId");
}
}