From defeef62ea04b432cc976aca488ef05e14419596 Mon Sep 17 00:00:00 2001 From: TitouanDor Date: Sat, 20 Jun 2026 15:18:08 +0200 Subject: [PATCH] =?UTF-8?q?modif=20des=20changement=20demand=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- club/api.py | 48 +++++++++++++++++------------------------------- club/schemas.py | 3 ++- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/club/api.py b/club/api.py index 52acb67a..39f1cba7 100644 --- a/club/api.py +++ b/club/api.py @@ -65,52 +65,38 @@ class UserClubController(ControllerBase): ) -@api_controller("/club_members/{since_date}") -class ClubMembersController(ControllerBase): +@api_controller("/clubs/{club_id}/members/{since_date}") +class ClubMembershipController(ControllerBase): @route.get( "/new", response=list[UserMembershipSchema], auth=[ApiKeyAuth(), SessionAuth()], permissions=[HasPerm("club.view_club")], - url_name="get_new_club_members_since_date", + url_name="get_new_clubs_members_since_date", ) def fetch_new_club_members(self, filters: Query[MembershipFilterSchema]): - """give all the members of a club that have joined since a given date""" + """give all the members of all clubs that have joined since a given date""" memberships = Membership.objects.ongoing().filter( start_date__gte=filters.since_date, end_date__isnull=True ) - club_ids = memberships.values_list("club_id") - clubs = Club.objects.filter(id__in=club_ids) - return [ - { - "club": club, - "user": membership.user, - "role": membership.role, - "joined_at": membership.start_date, - } - for club in clubs - for membership in memberships.filter(club=club) - ] + if filters.clubs_id is None: + return memberships.order_by("start_date") + + return memberships.filter(club_id__in=filters.clubs_id) @route.get( "/former", response=list[UserMembershipSchema], auth=[ApiKeyAuth(), SessionAuth()], permissions=[HasPerm("club.view_club")], - url_name="get_former_club_members_since_date", + url_name="get_former_clubs_members_since_date", ) def fetch_former_club_members(self, filters: Query[MembershipFilterSchema]): - """give all the former members of a club that have left since a given date""" - memberships = Membership.objects.filter(end_date__gte=filters.since_date) - club_ids = memberships.values_list("club_id") - clubs = Club.objects.filter(id__in=club_ids) - return [ - { - "club": club, - "user": membership.user, - "role": membership.role, - "left_at": membership.end_date, - } - for club in clubs - for membership in memberships.filter(club=club) - ] + """give all the former members of all clubs that have left since a given date""" + memberships = Membership.objects.filter( + end_date__gte=filters.since_date, + ) + if filters.clubs_id is None: + return memberships.order_by("start_date") + + return memberships.filter(club_id__in=filters.clubs_id) diff --git a/club/schemas.py b/club/schemas.py index d2f7f455..89acf9c2 100644 --- a/club/schemas.py +++ b/club/schemas.py @@ -84,4 +84,5 @@ class UserMembershipSchema(ModelSchema): class MembershipFilterSchema(FilterSchema): - since_date: Annotated[datetime, FilterLookup("date__lte")] = None + since_date: Annotated[datetime, FilterLookup("date__lte")] + clubs_id: set[int] | None = None