36 lines
1.3 KiB
Python
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")
|
|
)
|