48 lines
2.1 KiB
Python
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")
|