membersystem/src/membership/selectors.py

49 lines
1.3 KiB
Python

import contextlib
from django.contrib.auth.models import User
from django.utils import timezone
from membership.models import Member
from membership.models import Membership
from membership.models import SubscriptionPeriod
def get_subscription_periods() -> list[SubscriptionPeriod]:
subscription_periods = SubscriptionPeriod.objects.prefetch_related(
"membership_set",
"membership_set__user",
).all()
return list(subscription_periods)
def get_current_subscription_period() -> SubscriptionPeriod | None:
with contextlib.suppress(SubscriptionPeriod.DoesNotExist):
return SubscriptionPeriod.objects.prefetch_related(
"membership_set",
"membership_set__user",
).get(period__contains=timezone.now())
def get_memberships(
*,
user: User | None = None,
period: SubscriptionPeriod | None = None,
) -> Membership.QuerySet:
memberships = Membership.objects.select_related("membership_type").all()
if user:
memberships = memberships.for_user(user)
if period:
memberships = memberships.filter(period=period)
return memberships
def get_members():
return Member.objects.all().annotate_membership()
def get_member(*, member_id: int) -> Member:
return get_members().get(id=member_id)