Skip to content

Commit

Permalink
api.main: implement DELETE /group/<group-id> endpoint
Browse files Browse the repository at this point in the history
Implement endpoint to delete a user group. Remove users
from that group before deleting it. Also, remove group
name from permitted groups `Node.user_groups` to update
node.

Signed-off-by: Jeny Sadadia <[email protected]>
  • Loading branch information
Jeny Sadadia authored and gctucker committed Dec 5, 2023
1 parent b97aa0b commit 89f73d8
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions api/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,33 @@ async def get_group(group_id: str):
return await db.find_by_id(UserGroup, group_id)


@app.delete('/group/{group_id}', response_model=PageModel)
async def delete_group(group_id: str,
current_user: User = Depends(get_current_superuser)):
"""Delete user group matching the provided group id"""
group_from_id = await db.find_by_id(UserGroup, group_id)
if not group_from_id:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Group not found with id: {group_id}"
)
# Remove users from the group before deleting it
users = await db.find_by_attributes(
User, {"groups.name": group_from_id.name})
for user in users.items:
user['groups'].remove(group_from_id)
await db.update(User(**user))

# Remove group from user groups that are permitted to update node
nodes = await db.find_by_attributes(
Node, {"user_groups": group_from_id.name})
for node in nodes.items:
node['user_groups'].remove(group_from_id.name)
await db.update(Node(**node))

await db.delete_by_id(UserGroup, group_id)


# -----------------------------------------------------------------------------
# Nodes

Expand Down

0 comments on commit 89f73d8

Please sign in to comment.