Skip to content

Commit 04e332a

Browse files
committed
updated code to return member object
1 parent 3c3bcec commit 04e332a

File tree

5 files changed

+61
-50
lines changed

5 files changed

+61
-50
lines changed

Cargo.lock

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
use std::sync::Arc;
2-
3-
use crate::models::attendance::{Attendance, AttendanceWithMember};
4-
use async_graphql::{Context, Object, Result};
1+
use crate::models::attendance::Attendance;
2+
use crate::models::member::Member;
3+
use async_graphql::{ComplexObject, Context, Object, Result};
54
use chrono::NaiveDate;
65
use sqlx::PgPool;
6+
use std::sync::Arc;
77

88
#[derive(Default)]
99
pub struct AttendanceQueries;
1010

11+
#[ComplexObject]
12+
impl Attendance {
13+
async fn member(&self, ctx: &Context<'_>) -> Result<Member> {
14+
let pool = ctx.data::<Arc<PgPool>>()?;
15+
let member = sqlx::query_as::<_, Member>("SELECT * FROM Member WHERE member_id = $1")
16+
.bind(self.member_id)
17+
.fetch_one(pool.as_ref())
18+
.await?;
19+
20+
Ok(member)
21+
}
22+
}
23+
1124
#[Object]
1225
impl AttendanceQueries {
1326
async fn attendance(&self, ctx: &Context<'_>, member_id: i32) -> Result<Vec<Attendance>> {
@@ -25,20 +38,14 @@ impl AttendanceQueries {
2538
&self,
2639
ctx: &Context<'_>,
2740
date: NaiveDate,
28-
) -> Result<Vec<AttendanceWithMember>> {
29-
let pool = ctx.data::<Arc<PgPool>>().expect("Pool must be in context.");
41+
) -> Result<Vec<Attendance>> {
42+
let pool = ctx.data::<Arc<PgPool>>()?;
3043

31-
let records = sqlx::query_as::<_, AttendanceWithMember>(
32-
"SELECT att.attendance_id, att.member_id, att.date, att.is_present,
33-
att.time_in, att.time_out, mem.name, mem.year, mem.group_id
34-
FROM Attendance att
35-
JOIN Member mem ON att.member_id = mem.member_id
36-
WHERE att.date = $1",
37-
)
38-
.bind(date)
39-
.fetch_all(pool.as_ref())
40-
.await?;
44+
let rows = sqlx::query_as::<_, Attendance>("SELECT * FROM Attendance WHERE date = $1")
45+
.bind(date)
46+
.fetch_all(pool.as_ref())
47+
.await?;
4148

42-
Ok(records)
49+
Ok(rows)
4350
}
4451
}

src/graphql/queries/streak_queries.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
use std::sync::Arc;
2-
1+
use crate::models::member::Member;
32
use crate::models::status_update::StatusUpdateHistory;
43
use crate::models::status_update::StatusUpdateStreak as Streak;
5-
use async_graphql::{Context, Object, Result};
4+
use async_graphql::{ComplexObject, Context, Object, Result};
65
use sqlx::PgPool;
6+
use std::sync::Arc;
77

88
#[derive(Default)]
99
pub struct StreakQueries;
1010

11+
#[ComplexObject]
12+
impl StatusUpdateHistory {
13+
async fn member(&self, ctx: &Context<'_>) -> Result<Member> {
14+
let pool = ctx.data::<Arc<PgPool>>()?;
15+
let member = sqlx::query_as::<_, Member>("SELECT * FROM Member WHERE member_id = $1")
16+
.bind(self.member_id)
17+
.fetch_one(pool.as_ref())
18+
.await?;
19+
20+
Ok(member)
21+
}
22+
}
23+
1124
#[Object]
1225
impl StreakQueries {
1326
async fn streak(&self, ctx: &Context<'_>, member_id: i32) -> Result<Streak> {
@@ -47,12 +60,12 @@ impl StreakQueries {
4760
}
4861

4962
async fn status_update_history(&self, ctx: &Context<'_>) -> Result<Vec<StatusUpdateHistory>> {
50-
let pool = ctx.data::<Arc<PgPool>>().expect("Pool must be in context.");
63+
let pool = ctx.data::<Arc<PgPool>>()?;
5164

52-
Ok(
53-
sqlx::query_as::<_, StatusUpdateHistory>("SELECT * FROM StatusUpdateHistory")
54-
.fetch_all(pool.as_ref())
55-
.await?,
56-
)
65+
let rows = sqlx::query_as::<_, StatusUpdateHistory>("SELECT * FROM StatusUpdateHistory")
66+
.fetch_all(pool.as_ref())
67+
.await?;
68+
69+
Ok(rows)
5770
}
5871
}

src/models/attendance.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
33
use sqlx::FromRow;
44

55
#[derive(SimpleObject, FromRow)]
6+
#[graphql(complex)]
67
pub struct Attendance {
78
pub attendance_id: i32,
9+
#[graphql(skip)]
810
pub member_id: i32,
911
pub date: NaiveDate,
1012
pub is_present: bool,
@@ -45,16 +47,3 @@ pub struct MarkAttendanceInput {
4547
pub date: NaiveDate,
4648
pub hmac_signature: String,
4749
}
48-
49-
#[derive(SimpleObject, FromRow)]
50-
pub struct AttendanceWithMember {
51-
pub attendance_id: i32,
52-
pub member_id: i32,
53-
pub date: NaiveDate,
54-
pub is_present: bool,
55-
pub time_in: Option<NaiveTime>,
56-
pub time_out: Option<NaiveTime>,
57-
pub name: String,
58-
pub year: i32,
59-
pub group_id: i32,
60-
}

src/models/status_update.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ pub struct StreakInput {
2121
}
2222

2323
#[derive(SimpleObject, FromRow)]
24+
#[graphql(complex)]
2425
pub struct StatusUpdateHistory {
2526
pub update_id: i32,
27+
#[graphql(skip)]
2628
pub member_id: i32,
2729
pub is_updated: bool,
2830
pub date: NaiveDate,

0 commit comments

Comments
 (0)