diff --git a/chalicelib/api/members.py b/chalicelib/api/members.py index 57b3f32..37734f9 100644 --- a/chalicelib/api/members.py +++ b/chalicelib/api/members.py @@ -64,3 +64,9 @@ def delete_members(): def update_member_roles(user_id): data = members_api.current_request.json_body return member_service.update_roles(user_id, data["roles"]) + + +@members_api.route("/members/family-tree", methods=["GET"], cors=True) +@auth(members_api, roles=[Roles.MEMBER]) +def get_family_tree(): + return member_service.get_family_tree() diff --git a/chalicelib/services/MemberService.py b/chalicelib/services/MemberService.py index c5f8943..91297e3 100644 --- a/chalicelib/services/MemberService.py +++ b/chalicelib/services/MemberService.py @@ -2,6 +2,7 @@ from chalice import ConflictError, NotFoundError, UnauthorizedError from bson import ObjectId +from collections import defaultdict import json import jwt import boto3 @@ -118,5 +119,19 @@ def update_roles(self, document_id=str, roles=list) -> bool: [{"$set": {"roles": roles}}], ) + def get_family_tree(self): + data = mongo_module.get_data_from_collection(self.collection) + + # Group by family + family_groups = defaultdict(list) + + for member in data: + if "big" not in member or member["big"] == "": + continue + member["_id"] = str(member["_id"]) + family_groups[member["family"]].append(member) + + return family_groups + member_service = MemberService()