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_template import ( ProjectScopeTemplateFilter, ProjectAreaTemplateFilter, ProjectTaskTemplateFilter, ) from core.graphql.types.project_scope_template import ( ProjectScopeTemplateType, ProjectAreaTemplateType, ProjectTaskTemplateType, ) from core.models.project_scope_template import ( ProjectAreaTemplate, ProjectTaskTemplate, ) @strawberry.type class Query: project_scope_template: Optional[ProjectScopeTemplateType] = sd.node() project_scope_templates: List[ProjectScopeTemplateType] = sd.field(filters=ProjectScopeTemplateFilter) project_area_template: Optional[ProjectAreaTemplateType] = sd.node() project_area_templates: List[ProjectAreaTemplateType] = sd.field(filters=ProjectAreaTemplateFilter) project_task_template: Optional[ProjectTaskTemplateType] = sd.node() project_task_templates: List[ProjectTaskTemplateType] = sd.field(filters=ProjectTaskTemplateFilter) @sd.connection( DjangoCursorConnection["ProjectAreaTemplateType"], name="getProjectAreaTemplates", description="Return area templates for a given ProjectScopeTemplate", filters=ProjectAreaTemplateFilter, ) def get_project_area_templates(self, scope_template_id: ID) -> Iterable[ProjectAreaTemplate]: return ProjectAreaTemplate.objects.filter(scope_template_id=scope_template_id).order_by("order", "name") @sd.connection( DjangoCursorConnection["ProjectTaskTemplateType"], name="getProjectTaskTemplates", description="Return task templates for a given ProjectAreaTemplate", filters=ProjectTaskTemplateFilter, ) def get_project_task_templates(self, area_template_id: ID) -> Iterable[ProjectTaskTemplate]: return ProjectTaskTemplate.objects.filter(area_template_id=area_template_id).order_by("order", "id")