Skip to content

Commit 242936e

Browse files
authored
Merge pull request #122 from amfoss/develop
Update member mutation and add track column
2 parents a1100c4 + 9f0f606 commit 242936e

File tree

4 files changed

+64
-7
lines changed

4 files changed

+64
-7
lines changed

docs/member.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ struct Member {
1717
mac_address: String,
1818
discord_id: String,
1919
group_id: i32,
20+
track: String,
2021
}
2122
```
2223

@@ -53,6 +54,7 @@ mutation {
5354
macAddress: "XX:XX:XX:XX:XX:XX"
5455
discordId: "123456789"
5556
groupId: 1
57+
track: "web"
5658
}
5759
) {
5860
memberId
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-- Add migration script here
2+
ALTER TABLE Member
3+
ADD COLUMN track VARCHAR(255);
Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
use std::sync::Arc;
2-
1+
use crate::models::member::{CreateMemberInput, Member, UpdateMemberInput};
32
use async_graphql::{Context, Object, Result};
43
use chrono::Local;
54
use chrono_tz::Asia::Kolkata;
65
use sqlx::PgPool;
7-
8-
use crate::models::member::{CreateMemberInput, Member};
6+
use std::sync::Arc;
97

108
#[derive(Default)]
119
pub struct MemberMutations;
@@ -15,11 +13,11 @@ impl MemberMutations {
1513
#[graphql(name = "createMember")]
1614
async fn create_member(&self, ctx: &Context<'_>, input: CreateMemberInput) -> Result<Member> {
1715
let pool = ctx.data::<Arc<PgPool>>().expect("Pool must be in context.");
18-
1916
let now = Local::now().with_timezone(&Kolkata).date_naive();
17+
2018
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 *"
2321
)
2422
.bind(&input.roll_no)
2523
.bind(&input.name)
@@ -30,10 +28,47 @@ impl MemberMutations {
3028
.bind(&input.mac_address)
3129
.bind(&input.discord_id)
3230
.bind(input.group_id)
31+
.bind(&input.track)
3332
.bind(now)
3433
.fetch_one(pool.as_ref())
3534
.await?;
3635

3736
Ok(member)
3837
}
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+
}
3974
}

src/models/member.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub struct Member {
2323
pub mac_address: String,
2424
pub discord_id: String,
2525
pub group_id: i32,
26+
pub track: Option<String>,
2627
#[graphql(skip)] // Don't expose internal fields/meta-data
2728
pub created_at: NaiveDateTime,
2829
}
@@ -38,4 +39,20 @@ pub struct CreateMemberInput {
3839
pub mac_address: String,
3940
pub discord_id: String,
4041
pub group_id: i32,
42+
pub track: Option<String>,
43+
}
44+
45+
#[derive(InputObject)]
46+
pub struct UpdateMemberInput {
47+
pub member_id: i32,
48+
pub roll_no: Option<String>,
49+
pub name: Option<String>,
50+
pub email: Option<String>,
51+
pub sex: Option<Sex>,
52+
pub year: Option<i32>,
53+
pub hostel: Option<String>,
54+
pub mac_address: Option<String>,
55+
pub discord_id: Option<String>,
56+
pub group_id: Option<i32>,
57+
pub track: Option<String>,
4158
}

0 commit comments

Comments
 (0)