from typing import List, Optional, Iterable import strawberry import strawberry_django as sd from strawberry import ID from strawberry_django.relay import DjangoCursorConnection from core.graphql.filters.service import ServiceFilter from core.graphql.types.service import ServiceType from core.graphql.enums import DateOrdering from core.models.service import Service @strawberry.type class Query: service: Optional[ServiceType] = sd.node() services: List[ServiceType] = sd.field(filters=ServiceFilter) @sd.connection( DjangoCursorConnection["ServiceType"], name="getServicesByTeamMember", description="Return services that include the given TeamProfile ID as a team member", filters=ServiceFilter, ) def get_services_by_team_member( self, team_profile_id: ID, ordering: Optional[DateOrdering] = DateOrdering.DESC, ) -> Iterable["Service"]: order_prefix = "" if ordering == DateOrdering.ASC else "-" return ( Service.objects .filter(team_members__id=team_profile_id) .select_related('account_address', 'account_address__account') .prefetch_related('team_members') .order_by(f"{order_prefix}date", f"{order_prefix}id") )