2026-01-26 11:09:40 -05:00

36 lines
1.3 KiB
Python

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")
)