diff --git a/compliance-dashboard/src/infrastructure/findings.rs b/compliance-dashboard/src/infrastructure/findings.rs index eefe518..41ce95b 100644 --- a/compliance-dashboard/src/infrastructure/findings.rs +++ b/compliance-dashboard/src/infrastructure/findings.rs @@ -10,48 +10,50 @@ pub struct FindingsListResponse { pub page: Option, } +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +pub struct FindingsQuery { + pub page: u64, + pub severity: String, + pub scan_type: String, + pub status: String, + pub repo_id: String, + pub q: String, + pub sort_by: String, + pub sort_order: String, +} + #[server] -#[allow(clippy::too_many_arguments)] -pub async fn fetch_findings( - page: u64, - severity: String, - scan_type: String, - status: String, - repo_id: String, - q: String, - sort_by: String, - sort_order: String, -) -> Result { +pub async fn fetch_findings(query: FindingsQuery) -> Result { let state: super::server_state::ServerState = dioxus_fullstack::FullstackContext::extract().await?; let mut url = format!( - "{}/api/v1/findings?page={page}&limit=20", - state.agent_api_url + "{}/api/v1/findings?page={}&limit=20", + state.agent_api_url, query.page ); - if !severity.is_empty() { - url.push_str(&format!("&severity={severity}")); + if !query.severity.is_empty() { + url.push_str(&format!("&severity={}", query.severity)); } - if !scan_type.is_empty() { - url.push_str(&format!("&scan_type={scan_type}")); + if !query.scan_type.is_empty() { + url.push_str(&format!("&scan_type={}", query.scan_type)); } - if !status.is_empty() { - url.push_str(&format!("&status={status}")); + if !query.status.is_empty() { + url.push_str(&format!("&status={}", query.status)); } - if !repo_id.is_empty() { - url.push_str(&format!("&repo_id={repo_id}")); + if !query.repo_id.is_empty() { + url.push_str(&format!("&repo_id={}", query.repo_id)); } - if !q.is_empty() { + if !query.q.is_empty() { url.push_str(&format!( "&q={}", - url::form_urlencoded::byte_serialize(q.as_bytes()).collect::() + url::form_urlencoded::byte_serialize(query.q.as_bytes()).collect::() )); } - if !sort_by.is_empty() { - url.push_str(&format!("&sort_by={sort_by}")); + if !query.sort_by.is_empty() { + url.push_str(&format!("&sort_by={}", query.sort_by)); } - if !sort_order.is_empty() { - url.push_str(&format!("&sort_order={sort_order}")); + if !query.sort_order.is_empty() { + url.push_str(&format!("&sort_order={}", query.sort_order)); } let resp = reqwest::get(&url) diff --git a/compliance-dashboard/src/pages/findings.rs b/compliance-dashboard/src/pages/findings.rs index efebf04..8b25678 100644 --- a/compliance-dashboard/src/pages/findings.rs +++ b/compliance-dashboard/src/pages/findings.rs @@ -24,16 +24,18 @@ pub fn FindingsPage() -> Element { }); let mut findings = use_resource(move || { - let p = page(); - let sev = severity_filter(); - let typ = type_filter(); - let stat = status_filter(); - let repo = repo_filter(); - let q = search_query(); - let sb = sort_by(); - let so = sort_order(); + let query = crate::infrastructure::findings::FindingsQuery { + page: page(), + severity: severity_filter(), + scan_type: type_filter(), + status: status_filter(), + repo_id: repo_filter(), + q: search_query(), + sort_by: sort_by(), + sort_order: sort_order(), + }; async move { - crate::infrastructure::findings::fetch_findings(p, sev, typ, stat, repo, q, sb, so) + crate::infrastructure::findings::fetch_findings(query) .await .ok() }