Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion src/graphql/queries/member_queries.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use async_graphql::{ComplexObject, Context, Object, Result};
use chrono::NaiveDate;
use sqlx::PgPool;
use std::sync::Arc;

use crate::models::{
attendance::{AttendanceInfo, AttendanceSummaryInfo},
member::Member,
project::Project,
status_update::StatusUpdateStreakInfo,
status_update::{StatusUpdateHistory, StatusUpdateStreakInfo},
};

#[derive(Default)]
Expand Down Expand Up @@ -107,4 +108,35 @@ impl Member {
.await
.unwrap_or_default()
}

async fn status_update_count_by_date(
&self,
ctx: &Context<'_>,
start_date: NaiveDate,
end_date: NaiveDate,
) -> Result<i64> {
let pool = ctx.data::<Arc<PgPool>>().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)
}

async fn status_update_history(&self, ctx: &Context<'_>) -> Result<Vec<StatusUpdateHistory>> {
let pool = ctx.data::<Arc<PgPool>>().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)
}
}
Loading