Browse Source

admin: Return newly-created user in invite_user

Instead of having the caller dig through /admin/users for the right one,
just return the user upon creation.
Carl Dong 4 years ago
parent
commit
5f458b288a
1 changed files with 7 additions and 5 deletions
  1. 7 5
      src/api/admin.rs

+ 7 - 5
src/api/admin.rs

@@ -12,7 +12,7 @@ use rocket::{
 use rocket_contrib::json::Json;
 use rocket_contrib::json::Json;
 
 
 use crate::{
 use crate::{
-    api::{ApiResult, EmptyResult, NumberOrString},
+    api::{ApiResult, EmptyResult, JsonResult, NumberOrString},
     auth::{decode_admin, encode_jwt, generate_admin_claims, ClientIp},
     auth::{decode_admin, encode_jwt, generate_admin_claims, ClientIp},
     config::ConfigBuilder,
     config::ConfigBuilder,
     db::{backup_database, get_sql_server_version, models::*, DbConn, DbConnType},
     db::{backup_database, get_sql_server_version, models::*, DbConn, DbConnType},
@@ -279,7 +279,7 @@ struct InviteData {
 }
 }
 
 
 #[post("/invite", data = "<data>")]
 #[post("/invite", data = "<data>")]
-fn invite_user(data: Json<InviteData>, _token: AdminToken, conn: DbConn) -> EmptyResult {
+fn invite_user(data: Json<InviteData>, _token: AdminToken, conn: DbConn) -> JsonResult {
     let data: InviteData = data.into_inner();
     let data: InviteData = data.into_inner();
     let email = data.email.clone();
     let email = data.email.clone();
     if User::find_by_mail(&data.email, &conn).is_some() {
     if User::find_by_mail(&data.email, &conn).is_some() {
@@ -287,14 +287,16 @@ fn invite_user(data: Json<InviteData>, _token: AdminToken, conn: DbConn) -> Empt
     }
     }
 
 
     let mut user = User::new(email);
     let mut user = User::new(email);
-    user.save(&conn)?;
 
 
     if CONFIG.mail_enabled() {
     if CONFIG.mail_enabled() {
-        mail::send_invite(&user.email, &user.uuid, None, None, &CONFIG.invitation_org_name(), None)
+        mail::send_invite(&user.email, &user.uuid, None, None, &CONFIG.invitation_org_name(), None)?;
     } else {
     } else {
         let invitation = Invitation::new(data.email);
         let invitation = Invitation::new(data.email);
-        invitation.save(&conn)
+        invitation.save(&conn)?;
     }
     }
+
+    user.save(&conn)?;
+    Ok(Json(user.to_json(&conn)))
 }
 }
 
 
 #[post("/test/smtp", data = "<data>")]
 #[post("/test/smtp", data = "<data>")]