Skip to content
This repository was archived by the owner on Sep 8, 2019. It is now read-only.

Commit 98d9e68

Browse files
Update works
1 parent 7b08854 commit 98d9e68

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

rest_api/update.http

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
POST http://localhost:8000/users/2
2+
3+
{"banner_id": 1234}
4+
5+
###

src/main.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,17 @@ fn handle_request(
110110
database_connection
111111
).map(|s| Some(s))
112112
},
113-
(POST) (/users/create) => {
113+
(POST) (/users) => {
114114
let request_body = request.data().ok_or(WebdevError::new(WebdevErrorKind::Format))?;
115115
let new_user: models::NewUser = serde_json::from_reader(request_body)?;
116116

117117
handle_insert(new_user, database_connection).map(|s| Some(s))
118118
},
119+
(POST) (/users/{id: u64}) => {
120+
let request_body = request.data().ok_or(WebdevError::new(WebdevErrorKind::Format))?;
121+
let update_user: models::PartialUser = serde_json::from_reader(request_body)?;
122+
handle_update(id, update_user, database_connection).map(|_| None)
123+
},
119124
(DELETE) (/users/{id: u64}) => {
120125
handle_delete(id, database_connection).map(|_| None)
121126
},
@@ -168,6 +173,12 @@ fn handle_insert(
168173
Ok(serde_json::to_string(&inserted_user)?)
169174
}
170175

176+
fn handle_update(id: u64, user: models::PartialUser, database_connection: &MysqlConnection) -> Result<(), WebdevError> {
177+
diesel::update(users::table).filter(users::id.eq(id)).set(&user).execute(database_connection)?;
178+
179+
Ok(())
180+
}
181+
171182
fn handle_delete(id: u64, database_connection: &MysqlConnection) -> Result<(), WebdevError> {
172183
diesel::delete(users::table.filter(users::id.eq(id))).execute(database_connection)?;
173184

src/models.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,12 @@ pub struct NewUser {
2121
pub banner_id: u32,
2222
pub email: Option<String>,
2323
}
24+
25+
#[derive(AsChangeset, Serialize, Deserialize)]
26+
#[table_name = "users"]
27+
pub struct PartialUser {
28+
pub first_name: Option<String>,
29+
pub last_name: Option<String>,
30+
pub banner_id: Option<u32>,
31+
pub email: Option<Option<String>>,
32+
}

0 commit comments

Comments
 (0)