Skip to content

Commit

Permalink
added mutations for streaks
Browse files Browse the repository at this point in the history
  • Loading branch information
harikrishnatp committed Oct 21, 2024
1 parent 2b6d596 commit fbaacc7
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/db/member.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ pub struct Member {
pub sex: String,
pub year: i32,
pub macaddress: String,
pub streak: i32,
pub max_streak: i32,
}
46 changes: 46 additions & 0 deletions src/graphql/mutations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,52 @@ impl MutationRoot {

let current_time = Local::now().with_timezone(&Kolkata).time();

let prev_date = date - chrono::Duration::days(1);

let prev_attendance: Option<Attendance> = sqlx::query_as::<_, Attendance>(
"SELECT * FROM Attendance WHERE id = $1 AND date = $2"
)
.bind(id)
.bind(prev_date)
.fetch_optional(pool.as_ref())
.await?;

// Get member details to update streaks
let mut member: Member = sqlx::query_as::<_, Member>(
"SELECT * FROM Member WHERE id = $1"
)
.bind(id)
.fetch_one(pool.as_ref())
.await?;

if is_present {
if let Some(prev_attendance) = prev_attendance {
// continue streak if present yesterday
if prev_attendance.is_present {
member.streak += 1;
} else {
member.streak = 1;
}
} else {
member.streak = 1; // new streak if no previous update
}

if member.streak > member.max_streak {
member.max_streak = member.streak;
}
} else {
member.streak = 0;
}

sqlx::query(
"UPDATE Member SET streak = $1, max_streak = $2 WHERE id = $3"
)
.bind(member.streak)
.bind(member.max_streak)
.bind(id)
.execute(pool.as_ref())
.await?;

let attendance = sqlx::query_as::<_, Attendance>(
"
UPDATE Attendance
Expand Down

0 comments on commit fbaacc7

Please sign in to comment.