From ca4f925eeb2906b4e9f28e27b3d010fe77d335b4 Mon Sep 17 00:00:00 2001 From: Khushal Date: Tue, 10 Jun 2025 21:40:21 +0530 Subject: [PATCH 1/2] feat: add statusUpdateCountByDate query to get status update count of a member between two dates --- src/graphql/queries/member_queries.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/graphql/queries/member_queries.rs b/src/graphql/queries/member_queries.rs index efa2ecf..e650b03 100644 --- a/src/graphql/queries/member_queries.rs +++ b/src/graphql/queries/member_queries.rs @@ -1,6 +1,7 @@ use async_graphql::{ComplexObject, Context, Object, Result}; use sqlx::PgPool; use std::sync::Arc; +use chrono::NaiveDate; use crate::models::{ attendance::{AttendanceInfo, AttendanceSummaryInfo}, @@ -107,4 +108,22 @@ impl Member { .await .unwrap_or_default() } + + async fn status_update_count_by_date(&self, + ctx: &Context<'_>, + start_date:NaiveDate, + end_date:NaiveDate) + -> Result { + + let pool = ctx.data::>().expect("Pool must be in context."); + + let result : i64 = sqlx::query_scalar("SELECT count(*) AS updatecount FROM statusupdatehistory WHERE is_updated = TRUE and member_id=$1 and date BETWEEN $2 and $3;") + .bind(self.member_id) + .bind(start_date) + .bind(end_date) + .fetch_one(pool.as_ref()) + .await?; + + Ok(result) + } } From 7d8ecfdc56c109e0e4b416cc1bf8747fc64a4528 Mon Sep 17 00:00:00 2001 From: Khushal Date: Wed, 16 Jul 2025 19:05:13 +0530 Subject: [PATCH 2/2] feat: add status_update_history query that returns their update history of last six months --- src/graphql/queries/member_queries.rs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/graphql/queries/member_queries.rs b/src/graphql/queries/member_queries.rs index e650b03..cf3861d 100644 --- a/src/graphql/queries/member_queries.rs +++ b/src/graphql/queries/member_queries.rs @@ -1,13 +1,13 @@ use async_graphql::{ComplexObject, Context, Object, Result}; +use chrono::NaiveDate; use sqlx::PgPool; use std::sync::Arc; -use chrono::NaiveDate; use crate::models::{ attendance::{AttendanceInfo, AttendanceSummaryInfo}, member::Member, project::Project, - status_update::StatusUpdateStreakInfo, + status_update::{StatusUpdateHistory, StatusUpdateStreakInfo}, }; #[derive(Default)] @@ -109,12 +109,12 @@ impl Member { .unwrap_or_default() } - async fn status_update_count_by_date(&self, + async fn status_update_count_by_date( + &self, ctx: &Context<'_>, - start_date:NaiveDate, - end_date:NaiveDate) - -> Result { - + start_date: NaiveDate, + end_date: NaiveDate, + ) -> Result { let pool = ctx.data::>().expect("Pool must be in context."); let result : i64 = sqlx::query_scalar("SELECT count(*) AS updatecount FROM statusupdatehistory WHERE is_updated = TRUE and member_id=$1 and date BETWEEN $2 and $3;") @@ -126,4 +126,17 @@ impl Member { Ok(result) } + + async fn status_update_history(&self, ctx: &Context<'_>) -> Result> { + let pool = ctx.data::>().expect("Pool must be in context."); + + let history = sqlx::query_as::<_, StatusUpdateHistory>( + "SELECT * FROM StatusUpdateHistory WHERE member_id = $1 AND date BETWEEN (SELECT MAX(date) FROM StatusUpdateHistory WHERE member_id = $1) - INTERVAL '6 months' AND (SELECT MAX(date) FROM StatusUpdateHistory WHERE member_id = $1);" + ) + .bind(self.member_id) + .fetch_all(pool.as_ref()) + .await?; + + Ok(history) + } }