From 61fc83c8b74b6bc09d5b63cbc6e47a0ca9e8ce18 Mon Sep 17 00:00:00 2001 From: DarKylX Date: Sat, 17 Oct 2026 16:07:29 +0300 Subject: [PATCH] fix(programs): include team member avatars and email for organizers --- docs/modules/program-management.md | 2 +- partner_programs/services/management.py | 4 ++++ partner_programs/tests/test_management_api.py | 8 +++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/modules/program-management.md b/docs/modules/program-management.md index bea1c497..95ae597a 100644 --- a/docs/modules/program-management.md +++ b/docs/modules/program-management.md @@ -14,7 +14,7 @@ | пустой путь | GET | Основное, даты, режим программы, `updated_at`, материалы | | `participants/` | GET | DRF `count/next/previous/results`, ФИО, почта, город, регистрация именно в программе | | `projects/` | GET | Связи Project × Program, руководитель, сдача, оценивание, кейс и презентация | -| `projects/:link_id/team/` | GET | Руководитель и действующие Collaborator, без приглашений и изменений команды | +| `projects/:link_id/team/` | GET | Руководитель и действующие Collaborator: id, имя, роль, почта и nullable avatar; без приглашений и изменений команды | | `projects/:link_id/evaluation/` | GET | Оценки критериев этой программы, реальные назначения и `can_rate` | | `settings/basic/` | PATCH | Только поля содержания и изображений из макета | | `settings/dates/` | PATCH | Только пять календарных полей из макета | diff --git a/partner_programs/services/management.py b/partner_programs/services/management.py index 045d8b14..b04a8e11 100644 --- a/partner_programs/services/management.py +++ b/partner_programs/services/management.py @@ -153,6 +153,8 @@ def team_data(link): "id": project.leader_id, "name": person_name(project.leader), "role": "Руководитель", + "email": project.leader.email or None, + "avatar": project.leader.avatar or None, } ] people.extend( @@ -160,6 +162,8 @@ def team_data(link): "id": member.user_id, "name": person_name(member.user), "role": member.role or "Участник команды", + "email": member.user.email or None, + "avatar": member.user.avatar or None, } for member in project.collaborator_set.select_related("user") .exclude(user_id=project.leader_id) diff --git a/partner_programs/tests/test_management_api.py b/partner_programs/tests/test_management_api.py index 8e1dee90..58a7082f 100644 --- a/partner_programs/tests/test_management_api.py +++ b/partner_programs/tests/test_management_api.py @@ -158,7 +158,7 @@ def test_projects_use_link_submission_and_current_program_scores(self): ) def test_team_is_read_only_and_scoped_to_link(self): - member = create_user() + member = create_user(avatar="https://example.com/member-avatar.png") Collaborator.objects.bulk_create( [Collaborator(project=self.project, user=member, role="Разработчик")] ) @@ -168,6 +168,12 @@ def test_team_is_read_only_and_scoped_to_link(self): [m["id"] for m in response.data["members"]], [self.project.leader_id, member.pk], ) + leader, teammate = response.data["members"] + self.assertEqual(leader["email"], self.project.leader.email) + self.assertEqual(leader["avatar"], self.project.leader.avatar or None) + self.assertEqual(teammate["email"], member.email) + self.assertEqual(teammate["avatar"], member.avatar) + self.assertEqual(teammate["role"], "Разработчик") self.assertEqual( self.client.get( self.url("management-team", link_id=self.foreign_link.pk)