|
1 | 1 | use crate::auth::guards::AuthGuard; |
2 | 2 | use crate::auth::AuthContext; |
| 3 | +use crate::models::member; |
3 | 4 | use crate::models::{attendance::AttendanceRecord, status_update::StatusUpdateRecord}; |
4 | 5 | use async_graphql::{ComplexObject, Context, Object, Result}; |
5 | 6 | use chrono::NaiveDate; |
@@ -57,31 +58,39 @@ impl MemberQueries { |
57 | 58 | ctx: &Context<'_>, |
58 | 59 | member_id: Option<i32>, |
59 | 60 | email: Option<String>, |
| 61 | + discord_id: Option<String>, |
60 | 62 | ) -> Result<Option<Member>> { |
61 | 63 | let pool = ctx.data::<Arc<PgPool>>().expect("Pool must be in context."); |
62 | 64 |
|
63 | | - match (member_id, email) { |
64 | | - (Some(id), None) => { |
| 65 | + match (member_id, email, discord_id) { |
| 66 | + (Some(id), None, None) => { |
65 | 67 | let member = |
66 | 68 | sqlx::query_as::<_, Member>("SELECT * FROM Member WHERE member_id = $1") |
67 | 69 | .bind(id) |
68 | 70 | .fetch_optional(pool.as_ref()) |
69 | 71 | .await?; |
70 | 72 | Ok(member) |
71 | 73 | } |
72 | | - (None, Some(email)) => { |
| 74 | + (None, Some(email), None) => { |
73 | 75 | let member = sqlx::query_as::<_, Member>("SELECT * FROM Member WHERE email = $1") |
74 | 76 | .bind(email) |
75 | 77 | .fetch_optional(pool.as_ref()) |
76 | 78 | .await?; |
77 | 79 | Ok(member) |
78 | 80 | } |
79 | | - (Some(_), Some(_)) => Err("Provide only one of member_id or email".into()), |
80 | | - (None, None) => Err("Provide either member_id or email".into()), |
| 81 | + (None, None, Some(discord_id)) => { |
| 82 | + let member = |
| 83 | + sqlx::query_as::<_, Member>("SELECT * FROM Member WHERE discord_id = $1") |
| 84 | + .bind(discord_id) |
| 85 | + .fetch_optional(pool.as_ref()) |
| 86 | + .await?; |
| 87 | + Ok(member) |
| 88 | + } |
| 89 | + _ => Err("Provide exactly one of member_id, email, or discord_id".into()), |
81 | 90 | } |
82 | 91 | } |
83 | 92 |
|
84 | | - /// Fetch the details of the currently logged in member |
| 93 | + // Fetch the details of the currently logged in member |
85 | 94 | #[graphql(guard = "AuthGuard")] |
86 | 95 | async fn me(&self, ctx: &Context<'_>) -> Result<Member> { |
87 | 96 | let auth = ctx.data::<AuthContext>()?; |
|
0 commit comments