fix: use correct comparison logic

Was originally short-circuiting on empty lists of requirements.
This commit is contained in:
alphafetus committed 2026-03-19 13:37:11 -04:00
1 parent 628b607074
commit 681da8c326
1 file changed
+22 -18
+22 -18
View File
@@ -4,7 +4,7 @@ use crate::pages::api::files::list_files;
use crate::pages::api::students::get_all_student_data; use crate::pages::api::students::get_all_student_data;
use crate::pages::api::{get_all_scholarship_info, get_comparison_info}; use crate::pages::api::{get_all_scholarship_info, get_comparison_info};
use crate::utils::get_user_claims; use crate::utils::get_user_claims;
use leptos::logging::debug_log; use leptos::logging::{debug_log, debug_error};
use leptos::prelude::*; use leptos::prelude::*;
use leptos_oidc::AuthSignal; use leptos_oidc::AuthSignal;
@@ -63,8 +63,7 @@ pub fn StudentEligibilityPage() -> impl IntoView {
.get("name") .get("name")
.unwrap_or(&ValueType::String(None)) .unwrap_or(&ValueType::String(None))
.as_string() .as_string()
.ok() .ok()?
.flatten()
.unwrap_or_default(); .unwrap_or_default();
debug_log!("Checking scholarship: {}", scholarship_name); debug_log!("Checking scholarship: {}", scholarship_name);
let requirements_map = scholarship let requirements_map = scholarship
@@ -72,8 +71,7 @@ pub fn StudentEligibilityPage() -> impl IntoView {
.get("requirements") .get("requirements")
.unwrap_or(&ValueType::Map(None)) .unwrap_or(&ValueType::Map(None))
.as_map() .as_map()
.ok() .ok()?
.flatten()
.unwrap_or_default() .unwrap_or_default()
.values() .values()
.cloned() .cloned()
@@ -108,19 +106,25 @@ pub fn StudentEligibilityPage() -> impl IntoView {
&& resolved_requirements && resolved_requirements
.iter() .iter()
.all(|list| { .all(|list| {
list.iter() debug_log!("Checking list: {:?}", list);
.fold( if list.is_empty() {
false, true
|prev, requirement| { } else {
let result = requirement list.iter()
.compare(&student_info) .any(
.unwrap_or_else(|err| { |requirement| {
debug_log!("Requirement failed: {err}"); let result = requirement
false .compare(&student_info);
});
if prev { prev } else { result } match result.as_ref() {
}, Ok(_) => debug_log!("Requirement with id {} success", requirement.id),
) Err(e) => debug_error!("Requirement with id {} failed: {}", requirement.id, e)
};
result.is_ok()
},
)
}
}); });
if valid { if valid {
debug_log!("Scholarship is valid."); debug_log!("Scholarship is valid.");