modif des changement demandé

This commit is contained in:
TitouanDor
2026-06-20 15:18:08 +02:00
parent 859d724c34
commit defeef62ea
2 changed files with 19 additions and 32 deletions
+17 -31
View File
@@ -65,52 +65,38 @@ class UserClubController(ControllerBase):
) )
@api_controller("/club_members/{since_date}") @api_controller("/clubs/{club_id}/members/{since_date}")
class ClubMembersController(ControllerBase): class ClubMembershipController(ControllerBase):
@route.get( @route.get(
"/new", "/new",
response=list[UserMembershipSchema], response=list[UserMembershipSchema],
auth=[ApiKeyAuth(), SessionAuth()], auth=[ApiKeyAuth(), SessionAuth()],
permissions=[HasPerm("club.view_club")], 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]): 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( memberships = Membership.objects.ongoing().filter(
start_date__gte=filters.since_date, end_date__isnull=True start_date__gte=filters.since_date, end_date__isnull=True
) )
club_ids = memberships.values_list("club_id") if filters.clubs_id is None:
clubs = Club.objects.filter(id__in=club_ids) return memberships.order_by("start_date")
return [
{ return memberships.filter(club_id__in=filters.clubs_id)
"club": club,
"user": membership.user,
"role": membership.role,
"joined_at": membership.start_date,
}
for club in clubs
for membership in memberships.filter(club=club)
]
@route.get( @route.get(
"/former", "/former",
response=list[UserMembershipSchema], response=list[UserMembershipSchema],
auth=[ApiKeyAuth(), SessionAuth()], auth=[ApiKeyAuth(), SessionAuth()],
permissions=[HasPerm("club.view_club")], 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]): def fetch_former_club_members(self, filters: Query[MembershipFilterSchema]):
"""give all the former members of a club that have left since a given date""" """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) memberships = Membership.objects.filter(
club_ids = memberships.values_list("club_id") end_date__gte=filters.since_date,
clubs = Club.objects.filter(id__in=club_ids) )
return [ if filters.clubs_id is None:
{ return memberships.order_by("start_date")
"club": club,
"user": membership.user, return memberships.filter(club_id__in=filters.clubs_id)
"role": membership.role,
"left_at": membership.end_date,
}
for club in clubs
for membership in memberships.filter(club=club)
]
+2 -1
View File
@@ -84,4 +84,5 @@ class UserMembershipSchema(ModelSchema):
class MembershipFilterSchema(FilterSchema): class MembershipFilterSchema(FilterSchema):
since_date: Annotated[datetime, FilterLookup("date__lte")] = None since_date: Annotated[datetime, FilterLookup("date__lte")]
clubs_id: set[int] | None = None