1
- use std:: sync:: Arc ;
2
-
1
+ use crate :: models:: member:: { CreateMemberInput , Member , UpdateMemberInput } ;
3
2
use async_graphql:: { Context , Object , Result } ;
4
3
use chrono:: Local ;
5
4
use chrono_tz:: Asia :: Kolkata ;
6
5
use sqlx:: PgPool ;
7
-
8
- use crate :: models:: member:: { CreateMemberInput , Member } ;
6
+ use std:: sync:: Arc ;
9
7
10
8
#[ derive( Default ) ]
11
9
pub struct MemberMutations ;
@@ -15,11 +13,11 @@ impl MemberMutations {
15
13
#[ graphql( name = "createMember" ) ]
16
14
async fn create_member ( & self , ctx : & Context < ' _ > , input : CreateMemberInput ) -> Result < Member > {
17
15
let pool = ctx. data :: < Arc < PgPool > > ( ) . expect ( "Pool must be in context." ) ;
18
-
19
16
let now = Local :: now ( ) . with_timezone ( & Kolkata ) . date_naive ( ) ;
17
+
20
18
let member = sqlx:: query_as :: < _ , Member > (
21
- "INSERT INTO Member (roll_no, name, email, sex, year, hostel, mac_address, discord_id, group_id, created_at)
22
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *"
19
+ "INSERT INTO Member (roll_no, name, email, sex, year, hostel, mac_address, discord_id, group_id, track, created_at)
20
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 ) RETURNING *"
23
21
)
24
22
. bind ( & input. roll_no )
25
23
. bind ( & input. name )
@@ -30,10 +28,47 @@ impl MemberMutations {
30
28
. bind ( & input. mac_address )
31
29
. bind ( & input. discord_id )
32
30
. bind ( input. group_id )
31
+ . bind ( & input. track )
33
32
. bind ( now)
34
33
. fetch_one ( pool. as_ref ( ) )
35
34
. await ?;
36
35
37
36
Ok ( member)
38
37
}
38
+
39
+ #[ graphql( name = "updateMember" ) ]
40
+ async fn update_member ( & self , ctx : & Context < ' _ > , input : UpdateMemberInput ) -> Result < Member > {
41
+ let pool = ctx. data :: < Arc < PgPool > > ( ) . expect ( "Pool must be in context." ) ;
42
+
43
+ let member = sqlx:: query_as :: < _ , Member > (
44
+ "UPDATE Member SET
45
+ roll_no = COALESCE($1, roll_no),
46
+ name = COALESCE($2, name),
47
+ email = COALESCE($3, email),
48
+ sex = COALESCE($4, sex),
49
+ year = COALESCE($5, year),
50
+ hostel = COALESCE($6, hostel),
51
+ mac_address = COALESCE($7, mac_address),
52
+ discord_id = COALESCE($8, discord_id),
53
+ group_id = COALESCE($9, group_id),
54
+ track = COALESCE($10, track)
55
+ WHERE member_id = $11
56
+ RETURNING *" ,
57
+ )
58
+ . bind ( & input. roll_no )
59
+ . bind ( & input. name )
60
+ . bind ( & input. email )
61
+ . bind ( input. sex )
62
+ . bind ( input. year )
63
+ . bind ( & input. hostel )
64
+ . bind ( & input. mac_address )
65
+ . bind ( & input. discord_id )
66
+ . bind ( input. group_id )
67
+ . bind ( & input. track )
68
+ . bind ( input. member_id )
69
+ . fetch_one ( pool. as_ref ( ) )
70
+ . await ?;
71
+
72
+ Ok ( member)
73
+ }
39
74
}
0 commit comments