Add class member node
This commit is contained in:
parent
0ea72fe598
commit
acdcc7ea13
|
|
@ -11,7 +11,6 @@ from users.managers import RoleManager, UserRoleManager, UserManager
|
||||||
DEFAULT_SCHOOL_ID = 1
|
DEFAULT_SCHOOL_ID = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class User(AbstractUser):
|
class User(AbstractUser):
|
||||||
last_module = models.ForeignKey('books.Module', related_name='+', on_delete=models.SET_NULL, null=True)
|
last_module = models.ForeignKey('books.Module', related_name='+', on_delete=models.SET_NULL, null=True)
|
||||||
avatar_url = models.CharField(max_length=254, blank=True, default='')
|
avatar_url = models.CharField(max_length=254, blank=True, default='')
|
||||||
|
|
@ -43,13 +42,16 @@ class User(AbstractUser):
|
||||||
return User.objects.filter(school_classes__users=self.pk)
|
return User.objects.filter(school_classes__users=self.pk)
|
||||||
|
|
||||||
def get_teacher(self):
|
def get_teacher(self):
|
||||||
if self.user_roles.filter(role__key='teacher').exists():
|
if self.is_teacher():
|
||||||
return self
|
return self
|
||||||
elif self.school_classes.count() > 0:
|
elif self.school_classes.count() > 0:
|
||||||
return self.school_classes.first().get_teacher()
|
return self.school_classes.first().get_teacher()
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def is_teacher(self):
|
||||||
|
return self.user_roles.filter(role__key='teacher').exists()
|
||||||
|
|
||||||
def selected_class(self):
|
def selected_class(self):
|
||||||
try:
|
try:
|
||||||
settings = UserSetting.objects.get(user=self)
|
settings = UserSetting.objects.get(user=self)
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,21 @@
|
||||||
import graphene
|
import graphene
|
||||||
from graphene import relay
|
from django.db.models import Prefetch, Value, CharField
|
||||||
|
from django.db.models.functions import Concat
|
||||||
|
from graphene import relay, ObjectType
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
|
from graphql_relay import to_global_id
|
||||||
|
|
||||||
from assignments.models import StudentSubmission
|
|
||||||
from assignments.schema.types import StudentSubmissionNode
|
|
||||||
from basicknowledge.models import BasicKnowledge
|
from basicknowledge.models import BasicKnowledge
|
||||||
from basicknowledge.queries import InstrumentNode
|
from basicknowledge.queries import InstrumentNode
|
||||||
from books.models import Module
|
from books.models import Module
|
||||||
from books.schema.queries import ModuleNode
|
from books.schema.queries import ModuleNode
|
||||||
from users.models import User, SchoolClass
|
from users.models import User, SchoolClass, SchoolClassMember
|
||||||
|
|
||||||
|
|
||||||
class SchoolClassNode(DjangoObjectType):
|
class SchoolClassNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
|
members = graphene.List('users.schema.ClassMemberNode')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SchoolClass
|
model = SchoolClass
|
||||||
|
|
@ -23,6 +25,9 @@ class SchoolClassNode(DjangoObjectType):
|
||||||
def resolve_pk(self, *args, **kwargs):
|
def resolve_pk(self, *args, **kwargs):
|
||||||
return self.id
|
return self.id
|
||||||
|
|
||||||
|
def resolve_members(self, info, **kwargs):
|
||||||
|
return SchoolClassMember.objects.filter(school_class=self)
|
||||||
|
|
||||||
|
|
||||||
class UserNode(DjangoObjectType):
|
class UserNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
|
|
@ -46,6 +51,37 @@ class UserNode(DjangoObjectType):
|
||||||
return self.selected_class()
|
return self.selected_class()
|
||||||
|
|
||||||
|
|
||||||
|
class ClassMemberNode(ObjectType):
|
||||||
|
"""
|
||||||
|
We need to build this ourselves, because we want the active property on the node, because providing it on the
|
||||||
|
Connection or Edge for a UserNodeConnection is difficult.
|
||||||
|
"""
|
||||||
|
user = graphene.Field(UserNode)
|
||||||
|
active = graphene.Boolean()
|
||||||
|
first_name = graphene.String()
|
||||||
|
last_name = graphene.String()
|
||||||
|
is_teacher = graphene.Boolean()
|
||||||
|
id = graphene.ID()
|
||||||
|
|
||||||
|
def resolve_id(self, *args):
|
||||||
|
return to_global_id('UserNode', self.user.pk)
|
||||||
|
|
||||||
|
def resolve_active(self, *args):
|
||||||
|
return self.active
|
||||||
|
|
||||||
|
def resolve_first_name(self, *args):
|
||||||
|
return self.user.first_name
|
||||||
|
|
||||||
|
def resolve_last_name(self, *args):
|
||||||
|
return self.user.last_name
|
||||||
|
|
||||||
|
def resolve_user(self, info, **kwargs):
|
||||||
|
return self.user
|
||||||
|
|
||||||
|
def resolve_is_teacher(self, *args):
|
||||||
|
return self.user.is_teacher()
|
||||||
|
|
||||||
|
|
||||||
class UsersQuery(object):
|
class UsersQuery(object):
|
||||||
me = graphene.Field(UserNode)
|
me = graphene.Field(UserNode)
|
||||||
all_users = DjangoFilterConnectionField(UserNode)
|
all_users = DjangoFilterConnectionField(UserNode)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue