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