From e2c2549fd0f941e67cff69ab768d18b01e7c9c1e Mon Sep 17 00:00:00 2001 From: AnandajithS Date: Wed, 4 Jun 2025 20:21:52 +0530 Subject: [PATCH 1/2] Fixed status update --- src/graphql/models.rs | 1 + src/graphql/queries.rs | 1 + src/tasks/status_update.rs | 12 ++++++------ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/graphql/models.rs b/src/graphql/models.rs index 476e814..e8a2cf4 100644 --- a/src/graphql/models.rs +++ b/src/graphql/models.rs @@ -46,6 +46,7 @@ pub struct Member { pub group_id: i32, #[serde(default)] pub streak: Vec, // Note that Root will NOT have multiple Streak elements but it may be an empty list which is why we use a vector here + pub track: String } #[derive(Debug, Deserialize, Clone)] diff --git a/src/graphql/queries.rs b/src/graphql/queries.rs index 76575ef..e69d078 100644 --- a/src/graphql/queries.rs +++ b/src/graphql/queries.rs @@ -39,6 +39,7 @@ pub async fn fetch_members() -> anyhow::Result> { currentStreak maxStreak } + track } }"#; diff --git a/src/tasks/status_update.rs b/src/tasks/status_update.rs index 02932c9..2874b26 100644 --- a/src/tasks/status_update.rs +++ b/src/tasks/status_update.rs @@ -49,7 +49,7 @@ impl Task for StatusUpdateCheck { } } -type GroupedMember = HashMap>; +type GroupedMember = HashMap>; struct ReportConfig { time_valid_from: DateTime, @@ -146,7 +146,7 @@ fn categorize_members( updates: Vec, ) -> (GroupedMember, Vec) { let mut nice_list = vec![]; - let mut naughty_list = HashMap::new(); + let mut naughty_list: HashMap> = HashMap::new(); let mut sent_updates: HashSet = HashSet::new(); @@ -158,9 +158,9 @@ fn categorize_members( if sent_updates.contains(&member.discord_id) { nice_list.push(member.clone()); } else { - let group = member.group_id as u64; + let track= member.track.clone(); naughty_list - .entry(group) + .entry(track) .or_insert_with(Vec::new) .push(member.clone()); } @@ -237,8 +237,8 @@ fn format_members(members: &[Member]) -> String { fn format_defaulters(naughty_list: &GroupedMember) -> String { let mut description = String::new(); - for (group, missed_members) in naughty_list { - description.push_str(&format!("## Group {}\n", group)); + for (track, missed_members) in naughty_list { + description.push_str(&format!("## Track - {}\n", track)); for member in missed_members { let status = match member.streak[0].current_streak { 0 => ":x:", From 88bdcc08b1ca7e7055c566b6ad79ac70989c9cae Mon Sep 17 00:00:00 2001 From: AnandajithS Date: Sun, 8 Jun 2025 00:49:04 +0530 Subject: [PATCH 2/2] Handle null values for track --- src/graphql/models.rs | 2 +- src/tasks/status_update.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/graphql/models.rs b/src/graphql/models.rs index e8a2cf4..9444fa8 100644 --- a/src/graphql/models.rs +++ b/src/graphql/models.rs @@ -46,7 +46,7 @@ pub struct Member { pub group_id: i32, #[serde(default)] pub streak: Vec, // Note that Root will NOT have multiple Streak elements but it may be an empty list which is why we use a vector here - pub track: String + pub track: Option } #[derive(Debug, Deserialize, Clone)] diff --git a/src/tasks/status_update.rs b/src/tasks/status_update.rs index 2874b26..3711b3b 100644 --- a/src/tasks/status_update.rs +++ b/src/tasks/status_update.rs @@ -49,7 +49,7 @@ impl Task for StatusUpdateCheck { } } -type GroupedMember = HashMap>; +type GroupedMember = HashMap, Vec>; struct ReportConfig { time_valid_from: DateTime, @@ -146,7 +146,7 @@ fn categorize_members( updates: Vec, ) -> (GroupedMember, Vec) { let mut nice_list = vec![]; - let mut naughty_list: HashMap> = HashMap::new(); + let mut naughty_list: HashMap, Vec> = HashMap::new(); let mut sent_updates: HashSet = HashSet::new(); @@ -238,7 +238,11 @@ fn format_members(members: &[Member]) -> String { fn format_defaulters(naughty_list: &GroupedMember) -> String { let mut description = String::new(); for (track, missed_members) in naughty_list { - description.push_str(&format!("## Track - {}\n", track)); + match track{ + Some(t) => description.push_str(&format!("## Track - {}\n", t)), + None => description.push_str(&format!("## Unassigned")) + } + for member in missed_members { let status = match member.streak[0].current_streak { 0 => ":x:",