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.project import ProjectFilter from core.graphql.types.project import ProjectType from core.graphql.enums import DateOrdering from core.models.project import Project @strawberry.type class Query: project: Optional[ProjectType] = sd.node() projects: List[ProjectType] = sd.field(filters=ProjectFilter) @sd.connection( DjangoCursorConnection["ProjectType"], name="getProjectsByTeamMember", description="Return projects that include the given TeamProfile ID as a team member", filters=ProjectFilter, ) def get_projects_by_team_member( self, team_profile_id: ID, ordering: Optional[DateOrdering] = DateOrdering.DESC, ) -> Iterable["Project"]: order_prefix = "" if ordering == DateOrdering.ASC else "-" return ( Project.objects .filter(team_members__id=team_profile_id) .select_related('account_address', 'account_address__account', 'customer') .prefetch_related('team_members') .order_by(f"{order_prefix}date", f"{order_prefix}id") )