From 4904574cf66b2db3cfe2fb3e75b6723f7220ec76 Mon Sep 17 00:00:00 2001 From: Rudransh Shrivastava Date: Tue, 11 Nov 2025 19:35:15 +0530 Subject: [PATCH 1/4] add leaders --- backend/apps/api/rest/v0/chapter.py | 6 ++++++ backend/apps/api/rest/v0/project.py | 6 ++++++ backend/tests/apps/api/rest/v0/chapter_test.py | 2 ++ backend/tests/apps/api/rest/v0/project_test.py | 2 ++ 4 files changed, 16 insertions(+) diff --git a/backend/apps/api/rest/v0/chapter.py b/backend/apps/api/rest/v0/chapter.py index 35b4981996..32dbbbb848 100644 --- a/backend/apps/api/rest/v0/chapter.py +++ b/backend/apps/api/rest/v0/chapter.py @@ -38,8 +38,14 @@ class ChapterDetail(ChapterBase): """Detail schema for Chapter (used in single item endpoints).""" country: str + leaders: list[str] region: str + @staticmethod + def resolve_leaders(obj): + """Resolve leaders.""" + return obj.leaders_raw + class ChapterError(Schema): """Chapter error schema.""" diff --git a/backend/apps/api/rest/v0/project.py b/backend/apps/api/rest/v0/project.py index f2f9bd920d..2550a00515 100644 --- a/backend/apps/api/rest/v0/project.py +++ b/backend/apps/api/rest/v0/project.py @@ -40,6 +40,12 @@ class ProjectDetail(ProjectBase): """Detail schema for Project (used in single item endpoints).""" description: str + leaders: list[str] + + @staticmethod + def resolve_leaders(obj): + """Resolve leaders.""" + return obj.leaders_raw class ProjectError(Schema): diff --git a/backend/tests/apps/api/rest/v0/chapter_test.py b/backend/tests/apps/api/rest/v0/chapter_test.py index b1757cd7c6..1f575dc5dd 100644 --- a/backend/tests/apps/api/rest/v0/chapter_test.py +++ b/backend/tests/apps/api/rest/v0/chapter_test.py @@ -32,12 +32,14 @@ def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] + self.leaders_raw = [] chapter = ChapterDetail.from_orm(MockChapter(chapter_data)) assert chapter.country == chapter_data["country"] assert chapter.created_at == datetime.fromisoformat(chapter_data["created_at"]) assert chapter.key == chapter_data["key"] + assert chapter.leaders == [] assert chapter.name == chapter_data["name"] assert chapter.region == chapter_data["region"] assert chapter.updated_at == datetime.fromisoformat(chapter_data["updated_at"]) diff --git a/backend/tests/apps/api/rest/v0/project_test.py b/backend/tests/apps/api/rest/v0/project_test.py index 112b41fb5c..f76cfc4f80 100644 --- a/backend/tests/apps/api/rest/v0/project_test.py +++ b/backend/tests/apps/api/rest/v0/project_test.py @@ -32,12 +32,14 @@ def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] + self.leaders_raw = [] project = ProjectDetail.from_orm(MockProject(project_data)) assert project.created_at == datetime.fromisoformat(project_data["created_at"]) assert project.description == project_data["description"] assert project.key == project_data["key"] + assert project.leaders == [] assert project.level == project_data["level"] assert project.name == project_data["name"] assert project.updated_at == datetime.fromisoformat(project_data["updated_at"]) From 2dec1134921fa672a42becf79d24e9b675797d29 Mon Sep 17 00:00:00 2001 From: Rudransh Shrivastava Date: Tue, 11 Nov 2025 19:44:29 +0530 Subject: [PATCH 2/4] test: add real leader names --- backend/tests/apps/api/rest/v0/chapter_test.py | 4 ++-- backend/tests/apps/api/rest/v0/project_test.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/tests/apps/api/rest/v0/chapter_test.py b/backend/tests/apps/api/rest/v0/chapter_test.py index 1f575dc5dd..a7e5ae8d7b 100644 --- a/backend/tests/apps/api/rest/v0/chapter_test.py +++ b/backend/tests/apps/api/rest/v0/chapter_test.py @@ -32,14 +32,14 @@ def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] - self.leaders_raw = [] + self.leaders_raw = ["Alice", "Bob"] chapter = ChapterDetail.from_orm(MockChapter(chapter_data)) assert chapter.country == chapter_data["country"] assert chapter.created_at == datetime.fromisoformat(chapter_data["created_at"]) assert chapter.key == chapter_data["key"] - assert chapter.leaders == [] + assert chapter.leaders == ["Alice", "Bob"] assert chapter.name == chapter_data["name"] assert chapter.region == chapter_data["region"] assert chapter.updated_at == datetime.fromisoformat(chapter_data["updated_at"]) diff --git a/backend/tests/apps/api/rest/v0/project_test.py b/backend/tests/apps/api/rest/v0/project_test.py index f76cfc4f80..4be3529121 100644 --- a/backend/tests/apps/api/rest/v0/project_test.py +++ b/backend/tests/apps/api/rest/v0/project_test.py @@ -32,14 +32,14 @@ def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] - self.leaders_raw = [] + self.leaders_raw = ["Alice", "Bob"] project = ProjectDetail.from_orm(MockProject(project_data)) assert project.created_at == datetime.fromisoformat(project_data["created_at"]) assert project.description == project_data["description"] assert project.key == project_data["key"] - assert project.leaders == [] + assert project.leaders == ["Alice", "Bob"] assert project.level == project_data["level"] assert project.name == project_data["name"] assert project.updated_at == datetime.fromisoformat(project_data["updated_at"]) From e883380b78435fe9c1f7aa8be85d30e46a81da0b Mon Sep 17 00:00:00 2001 From: Rudransh Shrivastava Date: Sat, 22 Nov 2025 01:24:52 +0530 Subject: [PATCH 3/4] use EntityMember data for leaders --- backend/apps/api/rest/v0/chapter.py | 2 +- backend/apps/api/rest/v0/project.py | 2 +- backend/tests/apps/api/rest/v0/chapter_test.py | 6 +++++- backend/tests/apps/api/rest/v0/project_test.py | 6 +++++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/apps/api/rest/v0/chapter.py b/backend/apps/api/rest/v0/chapter.py index 32dbbbb848..a8d898102d 100644 --- a/backend/apps/api/rest/v0/chapter.py +++ b/backend/apps/api/rest/v0/chapter.py @@ -44,7 +44,7 @@ class ChapterDetail(ChapterBase): @staticmethod def resolve_leaders(obj): """Resolve leaders.""" - return obj.leaders_raw + return [leader.member_name for leader in obj.entity_leaders] class ChapterError(Schema): diff --git a/backend/apps/api/rest/v0/project.py b/backend/apps/api/rest/v0/project.py index 2550a00515..8a83dc5be4 100644 --- a/backend/apps/api/rest/v0/project.py +++ b/backend/apps/api/rest/v0/project.py @@ -45,7 +45,7 @@ class ProjectDetail(ProjectBase): @staticmethod def resolve_leaders(obj): """Resolve leaders.""" - return obj.leaders_raw + return [leader.member_name for leader in obj.entity_leaders] class ProjectError(Schema): diff --git a/backend/tests/apps/api/rest/v0/chapter_test.py b/backend/tests/apps/api/rest/v0/chapter_test.py index a7e5ae8d7b..dbc2bd9c38 100644 --- a/backend/tests/apps/api/rest/v0/chapter_test.py +++ b/backend/tests/apps/api/rest/v0/chapter_test.py @@ -27,12 +27,16 @@ ], ) def test_chapter_serializer_validation(chapter_data): + class MockEntityMember: + def __init__(self, name): + self.member_name = name + class MockChapter: def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] - self.leaders_raw = ["Alice", "Bob"] + self.entity_leaders = [MockEntityMember("Alice"), MockEntityMember("Bob")] chapter = ChapterDetail.from_orm(MockChapter(chapter_data)) diff --git a/backend/tests/apps/api/rest/v0/project_test.py b/backend/tests/apps/api/rest/v0/project_test.py index 4be3529121..1b1f6a0190 100644 --- a/backend/tests/apps/api/rest/v0/project_test.py +++ b/backend/tests/apps/api/rest/v0/project_test.py @@ -27,12 +27,16 @@ ], ) def test_project_serializer_validation(project_data): + class MockEntityMember: + def __init__(self, name): + self.member_name = name + class MockProject: def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] - self.leaders_raw = ["Alice", "Bob"] + self.entity_leaders = [MockEntityMember("Alice"), MockEntityMember("Bob")] project = ProjectDetail.from_orm(MockProject(project_data)) From 8e034960486e58ee751e31f675886880589fc4cd Mon Sep 17 00:00:00 2001 From: Rudransh Shrivastava Date: Sun, 23 Nov 2025 16:56:25 +0530 Subject: [PATCH 4/4] rename leaders -> leader_names --- backend/apps/api/rest/v0/chapter.py | 6 +++--- backend/apps/api/rest/v0/project.py | 6 +++--- backend/tests/apps/api/rest/v0/chapter_test.py | 2 +- backend/tests/apps/api/rest/v0/project_test.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/apps/api/rest/v0/chapter.py b/backend/apps/api/rest/v0/chapter.py index c24dcddf56..948d85ed4e 100644 --- a/backend/apps/api/rest/v0/chapter.py +++ b/backend/apps/api/rest/v0/chapter.py @@ -41,12 +41,12 @@ class ChapterDetail(ChapterBase): """Detail schema for Chapter (used in single item endpoints).""" country: str - leaders: list[str] + leader_names: list[str] region: str @staticmethod - def resolve_leaders(obj): - """Resolve leaders.""" + def resolve_leader_names(obj): + """Resolve leader names.""" return [leader.member_name for leader in obj.entity_leaders] diff --git a/backend/apps/api/rest/v0/project.py b/backend/apps/api/rest/v0/project.py index 93d9b4ad0c..84baebc53f 100644 --- a/backend/apps/api/rest/v0/project.py +++ b/backend/apps/api/rest/v0/project.py @@ -40,11 +40,11 @@ class ProjectDetail(ProjectBase): """Detail schema for Project (used in single item endpoints).""" description: str - leaders: list[str] + leader_names: list[str] @staticmethod - def resolve_leaders(obj): - """Resolve leaders.""" + def resolve_leader_names(obj): + """Resolve leader names.""" return [leader.member_name for leader in obj.entity_leaders] diff --git a/backend/tests/apps/api/rest/v0/chapter_test.py b/backend/tests/apps/api/rest/v0/chapter_test.py index df0b04a3ea..ab4460dfb6 100644 --- a/backend/tests/apps/api/rest/v0/chapter_test.py +++ b/backend/tests/apps/api/rest/v0/chapter_test.py @@ -49,7 +49,7 @@ def __init__(self, data): assert chapter.key == chapter_data["key"] assert chapter.latitude == chapter_data["latitude"] assert chapter.longitude == chapter_data["longitude"] - assert chapter.leaders == ["Alice", "Bob"] + assert chapter.leader_names == ["Alice", "Bob"] assert chapter.name == chapter_data["name"] assert chapter.region == chapter_data["region"] assert chapter.updated_at == datetime.fromisoformat(chapter_data["updated_at"]) diff --git a/backend/tests/apps/api/rest/v0/project_test.py b/backend/tests/apps/api/rest/v0/project_test.py index 1b1f6a0190..309a6dae84 100644 --- a/backend/tests/apps/api/rest/v0/project_test.py +++ b/backend/tests/apps/api/rest/v0/project_test.py @@ -43,7 +43,7 @@ def __init__(self, data): assert project.created_at == datetime.fromisoformat(project_data["created_at"]) assert project.description == project_data["description"] assert project.key == project_data["key"] - assert project.leaders == ["Alice", "Bob"] + assert project.leader_names == ["Alice", "Bob"] assert project.level == project_data["level"] assert project.name == project_data["name"] assert project.updated_at == datetime.fromisoformat(project_data["updated_at"])