Skip to content

Commit

Permalink
update: added a attendace fetch based on date, optimised the queries
Browse files Browse the repository at this point in the history
  • Loading branch information
sabarixr committed Feb 18, 2025
1 parent 9d11008 commit 8eec0d2
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
37 changes: 27 additions & 10 deletions src/graphql/queries/attendance_queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,28 @@ impl AttendanceQueries {
member_id: Option<i32>,
roll_no: Option<String>,
discord_id: Option<String>,
date: Option<String>,
) -> Result<Vec<Attendance>> {
let pool = ctx.data::<Arc<PgPool>>().expect("Pool must be in context.");

if let Some(d) = &date {
let query = "
SELECT
A.*,
M.name,
M.year
FROM Attendance A
JOIN Member M ON A.member_id = M.member_id
WHERE A.date = $1::DATE";

let attendance_query = sqlx::query_as::<_, Attendance>(query)
.bind(d)
.fetch_all(pool.as_ref())
.await?;

return Ok(attendance_query);
}

if let Some(id) = member_id {
let attendance_query =
sqlx::query_as::<_, Attendance>("SELECT * FROM Attendance WHERE member_id = $1")
Expand Down Expand Up @@ -88,15 +107,13 @@ impl AttendanceQueries {

let daily_count_result = sqlx::query!(
r#"
WITH dates AS (
SELECT generate_series($1::date, $2::date, '1 day') as day
)
SELECT dates.day as date,
COUNT(a.member_id) as total_present
FROM dates
LEFT JOIN Attendance a ON dates.day = a.date AND a.is_present = true
GROUP BY dates.day
ORDER BY dates.day
SELECT
a.date,
COUNT(CASE WHEN a.is_present = true THEN a.member_id END) as total_present
FROM Attendance a
WHERE a.date BETWEEN $1 AND $2
GROUP BY a.date
ORDER BY a.date
"#,
start,
end
Expand All @@ -108,7 +125,7 @@ impl AttendanceQueries {
Ok(rows) => rows
.into_iter()
.map(|row| DailyCount {
date: row.date.unwrap_or_default().to_string(),
date: row.date.to_string(),
count: row.total_present.unwrap_or(0),
})
.collect(),
Expand Down
5 changes: 5 additions & 0 deletions src/models/attendance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ pub struct Attendance {
pub is_present: bool,
pub time_in: Option<NaiveTime>,
pub time_out: Option<NaiveTime>,

//optional for attendance report
pub name: Option<String>,
pub year: Option<i32>,

#[graphql(skip)] // Don't expose internal fields/meta-data
pub created_at: NaiveDateTime,
#[graphql(skip)]
Expand Down

0 comments on commit 8eec0d2

Please sign in to comment.