80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
import graphene
|
|
from graphene import relay
|
|
from graphene_django import DjangoObjectType
|
|
from graphene_django.filter import DjangoFilterConnectionField
|
|
|
|
from assignments.models import StudentSubmission
|
|
from assignments.schema.types import StudentSubmissionNode
|
|
from basicknowledge.models import BasicKnowledge
|
|
from basicknowledge.queries import InstrumentNode
|
|
from books.models import Module
|
|
from books.schema.queries import ModuleNode
|
|
from users.models import User, SchoolClass
|
|
|
|
|
|
class SchoolClassNode(DjangoObjectType):
|
|
pk = graphene.Int()
|
|
|
|
class Meta:
|
|
model = SchoolClass
|
|
filter_fields = ['name']
|
|
interfaces = (relay.Node,)
|
|
|
|
def resolve_pk(self, *args, **kwargs):
|
|
return self.id
|
|
|
|
|
|
class UserNode(DjangoObjectType):
|
|
pk = graphene.Int()
|
|
permissions = graphene.List(graphene.String)
|
|
selected_class = graphene.Field(SchoolClassNode)
|
|
|
|
class Meta:
|
|
model = User
|
|
filter_fields = ['username', 'email']
|
|
only_fields = ['username', 'email', 'first_name', 'last_name', 'school_classes', 'last_module', 'avatar_url',
|
|
'selected_class']
|
|
interfaces = (relay.Node,)
|
|
|
|
def resolve_pk(self, info, **kwargs):
|
|
return self.id
|
|
|
|
def resolve_permissions(self, info):
|
|
return self.get_all_permissions()
|
|
|
|
def resolve_selected_class(self, info):
|
|
return self.selected_class()
|
|
|
|
|
|
class UsersQuery(object):
|
|
me = graphene.Field(UserNode)
|
|
all_users = DjangoFilterConnectionField(UserNode)
|
|
my_activity = DjangoFilterConnectionField(ModuleNode)
|
|
my_instrument_activity = DjangoFilterConnectionField(InstrumentNode)
|
|
|
|
def resolve_me(self, info, **kwargs):
|
|
return info.context.user
|
|
|
|
def resolve_all_users(self, info, **kwargs):
|
|
if not info.context.user.is_superuser:
|
|
return User.objects.none()
|
|
else:
|
|
return User.objects.all()
|
|
|
|
def resolve_my_activity(self, info, **kwargs):
|
|
return Module.objects.all()
|
|
|
|
def resolve_my_instrument_activity(self, info, **kwargs):
|
|
return BasicKnowledge.objects.all()
|
|
|
|
|
|
class AllUsersQuery(object):
|
|
me = graphene.Field(UserNode)
|
|
all_users = DjangoFilterConnectionField(UserNode)
|
|
|
|
def resolve_all_users(self, info, **kwargs):
|
|
if not info.context.user.is_superuser:
|
|
return User.objects.none()
|
|
else:
|
|
return User.objects.all()
|