Add ability to update invite count to collab API

Nathan Sobo and Antonio Scandurra created

Co-Authored-By: Antonio Scandurra <me@as-cii.com>

Change summary

crates/collab/src/api.rs | 16 ++++++++++++----
crates/collab/src/db.rs  | 10 +++++++++-
2 files changed, 21 insertions(+), 5 deletions(-)

Detailed changes

crates/collab/src/api.rs 🔗

@@ -97,7 +97,8 @@ async fn create_user(
 
 #[derive(Deserialize)]
 struct UpdateUserParams {
-    admin: bool,
+    admin: Option<bool>,
+    invite_count: Option<u32>,
 }
 
 async fn update_user(
@@ -105,9 +106,16 @@ async fn update_user(
     Json(params): Json<UpdateUserParams>,
     Extension(app): Extension<Arc<AppState>>,
 ) -> Result<()> {
-    app.db
-        .set_user_is_admin(UserId(user_id), params.admin)
-        .await?;
+    if let Some(admin) = params.admin {
+        app.db.set_user_is_admin(UserId(user_id), admin).await?;
+    }
+
+    if let Some(invite_count) = params.invite_count {
+        app.db
+            .set_invite_count(UserId(user_id), invite_count)
+            .await?;
+    }
+
     Ok(())
 }
 

crates/collab/src/db.rs 🔗

@@ -796,11 +796,13 @@ macro_rules! id_type {
 }
 
 id_type!(UserId);
-#[derive(Clone, Debug, FromRow, Serialize, PartialEq)]
+#[derive(Clone, Debug, Default, FromRow, Serialize, PartialEq)]
 pub struct User {
     pub id: UserId,
     pub github_login: String,
     pub admin: bool,
+    pub invite_code: Option<String>,
+    pub invite_count: i32,
 }
 
 id_type!(OrgId);
@@ -912,21 +914,25 @@ pub mod tests {
                         id: user,
                         github_login: "user".to_string(),
                         admin: false,
+                        ..Default::default()
                     },
                     User {
                         id: friend1,
                         github_login: "friend-1".to_string(),
                         admin: false,
+                        ..Default::default()
                     },
                     User {
                         id: friend2,
                         github_login: "friend-2".to_string(),
                         admin: false,
+                        ..Default::default()
                     },
                     User {
                         id: friend3,
                         github_login: "friend-3".to_string(),
                         admin: false,
+                        ..Default::default()
                     }
                 ]
             );
@@ -1547,6 +1553,8 @@ pub mod tests {
                         id: user_id,
                         github_login: github_login.to_string(),
                         admin,
+                        invite_code: None,
+                        invite_count: 0,
                     },
                 );
                 Ok(user_id)