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