nexus-5/core/graphql/queries/project_scope.py
2026-01-26 11:09:40 -05:00

48 lines
2.1 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_scope import (
ProjectScopeFilter,
ProjectScopeCategoryFilter,
ProjectScopeTaskFilter, ProjectScopeTaskCompletionFilter,
)
from core.graphql.types.project_scope import (
ProjectScopeType,
ProjectScopeCategoryType,
ProjectScopeTaskType,
ProjectScopeTaskCompletionType
)
from core.models.project_scope import ProjectScopeCategory, ProjectScopeTask
@strawberry.type
class Query:
project_scope: Optional[ProjectScopeType] = sd.node()
project_scopes: List[ProjectScopeType] = sd.field(filters=ProjectScopeFilter)
project_scope_category: Optional[ProjectScopeCategoryType] = sd.node()
project_scope_categories: List[ProjectScopeCategoryType] = sd.field(filters=ProjectScopeCategoryFilter)
project_scope_task: Optional[ProjectScopeTaskType] = sd.node()
project_scope_tasks: List[ProjectScopeTaskType] = sd.field(filters=ProjectScopeTaskFilter)
project_scope_task_completion: Optional[ProjectScopeTaskCompletionType] = sd.node()
project_scope_task_completions: List[ProjectScopeTaskCompletionType] = sd.field(filters=ProjectScopeTaskCompletionFilter)
@sd.connection(
DjangoCursorConnection["ProjectScopeCategoryType"],
name="getProjectScopeCategories",
description="Return categories for a given ProjectScope",
filters=ProjectScopeCategoryFilter,
)
def get_project_scope_categories(self, scope_id: ID) -> Iterable[ProjectScopeCategory]:
return ProjectScopeCategory.objects.filter(scope_id=scope_id).order_by("order", "name")
@sd.connection(
DjangoCursorConnection["ProjectScopeTaskType"],
name="getProjectScopeTasks",
description="Return tasks for a given ProjectScopeCategory",
filters=ProjectScopeTaskFilter,
)
def get_project_scope_tasks(self, category_id: ID) -> Iterable[ProjectScopeTask]:
return ProjectScopeTask.objects.filter(category_id=category_id).order_by("order", "id")