Change summary
crates/collab/src/api.rs | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
Detailed changes
@@ -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(¶ms.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, ¶ms.github_login)
+ .await?
+ } else {
+ let user_id = app
+ .db
+ .create_user(¶ms.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))
}