Can leave a family
This commit is contained in:
parent
ad54f83c2c
commit
a94b26b23c
@ -79,6 +79,13 @@ pub async fn single_info(f: FamilyInPath) -> HttpResult {
|
|||||||
.json(families_service::get_family_membership(f.family_id(), f.user_id()).await?))
|
.json(families_service::get_family_membership(f.family_id(), f.user_id()).await?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Attempt to leave a family
|
||||||
|
pub async fn leave(f: FamilyInPath) -> HttpResult {
|
||||||
|
families_service::remove_membership(f.family_id(), f.user_id()).await?;
|
||||||
|
|
||||||
|
Ok(HttpResponse::Accepted().finish())
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the list of users who belongs to a family
|
/// Get the list of users who belongs to a family
|
||||||
pub async fn users(f: FamilyInPath) -> HttpResult {
|
pub async fn users(f: FamilyInPath) -> HttpResult {
|
||||||
Ok(HttpResponse::Ok().json(families_service::get_memberships_of_family(f.family_id()).await?))
|
Ok(HttpResponse::Ok().json(families_service::get_memberships_of_family(f.family_id()).await?))
|
||||||
|
@ -97,6 +97,10 @@ async fn main() -> std::io::Result<()> {
|
|||||||
"/family/{id}/info",
|
"/family/{id}/info",
|
||||||
web::get().to(families_controller::single_info),
|
web::get().to(families_controller::single_info),
|
||||||
)
|
)
|
||||||
|
.route(
|
||||||
|
"/family/{id}/leave",
|
||||||
|
web::post().to(families_controller::leave),
|
||||||
|
)
|
||||||
.route(
|
.route(
|
||||||
"/family/{id}/users",
|
"/family/{id}/users",
|
||||||
web::get().to(families_controller::users),
|
web::get().to(families_controller::users),
|
||||||
|
@ -111,8 +111,8 @@ pub struct FamilyMembership {
|
|||||||
family_id: i32,
|
family_id: i32,
|
||||||
name: String,
|
name: String,
|
||||||
time_create: i64,
|
time_create: i64,
|
||||||
is_admin: bool,
|
pub is_admin: bool,
|
||||||
invitation_code: String,
|
invitation_code: String,
|
||||||
count_members: i64,
|
pub count_members: i64,
|
||||||
count_admins: i64,
|
pub count_admins: i64,
|
||||||
}
|
}
|
||||||
|
@ -132,9 +132,49 @@ pub async fn get_family_membership(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Delete a family
|
||||||
|
pub async fn delete_family(family_id: FamilyID) -> anyhow::Result<()> {
|
||||||
|
// TODO : delete members and couples
|
||||||
|
|
||||||
|
// Remove all memberships
|
||||||
|
db_connection::execute(|conn| {
|
||||||
|
diesel::delete(
|
||||||
|
memberships::dsl::memberships.filter(memberships::dsl::family_id.eq(family_id.0)),
|
||||||
|
)
|
||||||
|
.execute(conn)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
// Remove the family itself
|
||||||
|
db_connection::execute(|conn| {
|
||||||
|
diesel::delete(families::dsl::families.filter(families::dsl::id.eq(family_id.0)))
|
||||||
|
.execute(conn)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Remove a membership to a family
|
/// Remove a membership to a family
|
||||||
pub async fn remove_membership(_family_id: FamilyID, _user_id: UserID) {
|
pub async fn remove_membership(family_id: FamilyID, user_id: UserID) -> anyhow::Result<()> {
|
||||||
todo!()
|
let family = get_family_membership(family_id, user_id).await?;
|
||||||
|
|
||||||
|
if family.is_admin && family.count_admins == 1 {
|
||||||
|
// We need to delete the whole family
|
||||||
|
delete_family(family_id).await
|
||||||
|
} else {
|
||||||
|
// Remove the single membership
|
||||||
|
db_connection::execute(|conn| {
|
||||||
|
diesel::delete(
|
||||||
|
memberships::dsl::memberships.filter(
|
||||||
|
memberships::dsl::user_id
|
||||||
|
.eq(user_id.0)
|
||||||
|
.and(memberships::dsl::family_id.eq(family_id.0)),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.execute(conn)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove all memberships of user
|
/// Remove all memberships of user
|
||||||
|
@ -177,9 +177,10 @@ pub async fn delete_account(user: &User) -> anyhow::Result<()> {
|
|||||||
login_token_service::disconnect_user_from_all_devices(user.id()).await?;
|
login_token_service::disconnect_user_from_all_devices(user.id()).await?;
|
||||||
|
|
||||||
db_connection::execute(|conn| {
|
db_connection::execute(|conn| {
|
||||||
diesel::delete(users::dsl::users.filter(users::dsl::id.eq(user.id().0))).execute(conn)?;
|
diesel::delete(users::dsl::users.filter(users::dsl::id.eq(user.id().0))).execute(conn)
|
||||||
Ok(())
|
})?;
|
||||||
})
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Mark account as validated
|
/// Mark account as validated
|
||||||
|
Loading…
Reference in New Issue
Block a user