WIP

Nathan Sobo created

Change summary

crates/collab/src/api.rs | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)

Detailed changes

crates/collab/src/api.rs 🔗

@@ -74,6 +74,7 @@ async fn get_users(Extension(app): Extension<Arc<AppState>>) -> Result<Json<Vec<
 #[derive(Deserialize)]
 struct CreateUserParams {
     github_login: String,
+    invite_code: Option<String>,
     admin: bool,
 }
 
@@ -81,16 +82,23 @@ async fn create_user(
     Json(params): Json<CreateUserParams>,
     Extension(app): Extension<Arc<AppState>>,
 ) -> Result<Json<User>> {
-    let user_id = app
-        .db
-        .create_user(&params.github_login, params.admin)
-        .await?;
+    let user = if let Some(invite_code) = params.invite_code {
+        let user_id = app
+            .db
+            .redeem_invite_code(&invite_code, &params.github_login)
+            .await?
+    } else {
+        let user_id = app
+            .db
+            .create_user(&params.github_login, params.admin)
+            .await?;
 
-    let user = app
-        .db
-        .get_user_by_id(user_id)
-        .await?
-        .ok_or_else(|| anyhow!("couldn't find the user we just created"))?;
+        let user = app
+            .db
+            .get_user_by_id(user_id)
+            .await?
+            .ok_or_else(|| anyhow!("couldn't find the user we just created"))?
+    };
 
     Ok(Json(user))
 }