commit 1cb67eee691f6020e181ad0f52c945319176828b
parent e88d8c856dbdd3cee56dc23141154c92db714c70
Author: Daniel GarcĂa <dani-garcia@users.noreply.github.com>
Date: Wed, 11 Jul 2018 16:30:03 +0200
Implement leave organization (accessed from the bottom of the user's settings page)
Diffstat:
2 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/src/api/core/mod.rs b/src/api/core/mod.rs
@@ -65,6 +65,7 @@ pub fn routes() -> Vec<Route> {
get_organization,
create_organization,
delete_organization,
+ leave_organization,
get_user_collections,
get_org_collections,
get_org_collection_detail,
diff --git a/src/api/core/organizations.rs b/src/api/core/organizations.rs
@@ -73,6 +73,29 @@ fn delete_organization(org_id: String, data: JsonUpcase<PasswordData>, headers:
}
}
+#[post("/organizations/<org_id>/leave")]
+fn leave_organization(org_id: String, headers: Headers, conn: DbConn) -> EmptyResult {
+ match UserOrganization::find_by_user_and_org(&headers.user.uuid, &org_id, &conn) {
+ None => err!("User not part of organization"),
+ Some(user_org) => {
+ if user_org.type_ == UserOrgType::Owner as i32 {
+ let num_owners = UserOrganization::find_by_org_and_type(
+ &org_id, UserOrgType::Owner as i32, &conn)
+ .len();
+
+ if num_owners <= 1 {
+ err!("The last owner can't leave")
+ }
+ }
+
+ match user_org.delete(&conn) {
+ Ok(()) => Ok(()),
+ Err(_) => err!("Failed leaving the organization")
+ }
+ }
+ }
+}
+
#[get("/organizations/<org_id>")]
fn get_organization(org_id: String, _headers: OwnerHeaders, conn: DbConn) -> JsonResult {
match Organization::find_by_uuid(&org_id, &conn) {