Add Filters to SQL

This commit is contained in:
Chaoscaot
2023-03-09 14:52:04 +01:00
parent 5c12ce1202
commit a2a750f20e
3 changed files with 72 additions and 6 deletions

View File

@@ -0,0 +1,35 @@
#[derive(Default, Debug, Clone)]
pub struct SchematicFilter {
pub user_id: Option<Vec<u32>>,
pub name: Option<Vec<String>>,
}
impl SchematicFilter {
pub fn new() -> SchematicFilter {
SchematicFilter {
user_id: None,
name: None,
}
}
pub fn user_id(mut self, user_id: Vec<&u32>) -> SchematicFilter {
self.user_id = Some(user_id.into_iter().map(|id| *id).collect());
self
}
pub fn name(mut self, name: Vec<&String>) -> SchematicFilter {
self.name = Some(name.into_iter().map(|name| name.to_string()).collect());
self
}
pub fn build(self) -> String {
let mut query = Vec::new();
if let Some(user_id) = self.user_id {
query.push(user_id.into_iter().map(|id| format!("ND.NodeOwner = {}", id)).collect::<Vec<String>>().join(" OR "));
}
if let Some(name) = self.name {
query.push(name.into_iter().map(|name| format!("SN.NodeName LIKE '%{}%'", name)).collect::<Vec<String>>().join(" OR "));
}
format!("AND ({})", query.join(") AND ("))
}
}