1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
from typing import Optional
import strawberry
import strawberry_django
from strawberry_django.optimizer import DjangoOptimizerExtension
from strawberry_django.pagination import OffsetPaginated
from .models import (
AndroidProject,
AppProject,
ArtProject,
Company,
EngineeringProject,
IOSProject,
Project,
ResearchProject,
SoftwareProject,
TechnicalProject,
)
@strawberry_django.interface(Project)
class ProjectType:
topic: strawberry.auto
@strawberry_django.field(only=("topic",))
def topic_upper(self) -> str:
return self.topic.upper()
@strawberry_django.type(ArtProject)
class ArtProjectType(ProjectType):
artist: strawberry.auto
art_style_upper: strawberry.auto
@strawberry_django.field(only=("artist",))
def artist_upper(self) -> str:
return self.artist.upper()
@strawberry_django.type(ResearchProject)
class ResearchProjectType(ProjectType):
supervisor: strawberry.auto
@strawberry_django.interface(TechnicalProject)
class TechnicalProjectType(ProjectType):
timeline: strawberry.auto
@strawberry_django.type(SoftwareProject)
class SoftwareProjectType(TechnicalProjectType):
repository: strawberry.auto
@strawberry_django.type(EngineeringProject)
class EngineeringProjectType(TechnicalProjectType):
lead_engineer: strawberry.auto
@strawberry_django.interface(AppProject)
class AppProjectType(TechnicalProjectType):
repository: strawberry.auto
@strawberry_django.type(AndroidProject)
class AndroidProjectType(AppProjectType):
android_version: strawberry.auto
@strawberry_django.type(IOSProject)
class IOSProjectType(AppProjectType):
ios_version: strawberry.auto
@strawberry_django.type(Company)
class CompanyType:
name: strawberry.auto
projects: list[ProjectType]
main_project: Optional[ProjectType]
@strawberry.type
class Query:
companies: list[CompanyType] = strawberry_django.field()
projects: list[ProjectType] = strawberry_django.field()
projects_paginated: list[ProjectType] = strawberry_django.field(pagination=True)
projects_offset_paginated: OffsetPaginated[ProjectType] = (
strawberry_django.offset_paginated()
)
schema = strawberry.Schema(
query=Query,
types=[
ArtProjectType,
ResearchProjectType,
TechnicalProjectType,
EngineeringProjectType,
SoftwareProjectType,
AppProjectType,
IOSProjectType,
AndroidProjectType,
],
extensions=[DjangoOptimizerExtension],
)
|