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
|
||||
|
||||
|
||||
|
||||
class User(AbstractUser):
|
||||
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='')
|
||||
|
|
@ -43,13 +42,16 @@ class User(AbstractUser):
|
|||
return User.objects.filter(school_classes__users=self.pk)
|
||||
|
||||
def get_teacher(self):
|
||||
if self.user_roles.filter(role__key='teacher').exists():
|
||||
if self.is_teacher():
|
||||
return self
|
||||
elif self.school_classes.count() > 0:
|
||||
return self.school_classes.first().get_teacher()
|
||||
else:
|
||||
return None
|
||||
|
||||
def is_teacher(self):
|
||||
return self.user_roles.filter(role__key='teacher').exists()
|
||||
|
||||
def selected_class(self):
|
||||
try:
|
||||
settings = UserSetting.objects.get(user=self)
|
||||
|
|
|
|||
|
|
@ -1,19 +1,21 @@
|
|||
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.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.queries import InstrumentNode
|
||||
from books.models import Module
|
||||
from books.schema.queries import ModuleNode
|
||||
from users.models import User, SchoolClass
|
||||
from users.models import User, SchoolClass, SchoolClassMember
|
||||
|
||||
|
||||
class SchoolClassNode(DjangoObjectType):
|
||||
pk = graphene.Int()
|
||||
members = graphene.List('users.schema.ClassMemberNode')
|
||||
|
||||
class Meta:
|
||||
model = SchoolClass
|
||||
|
|
@ -23,6 +25,9 @@ class SchoolClassNode(DjangoObjectType):
|
|||
def resolve_pk(self, *args, **kwargs):
|
||||
return self.id
|
||||
|
||||
def resolve_members(self, info, **kwargs):
|
||||
return SchoolClassMember.objects.filter(school_class=self)
|
||||
|
||||
|
||||
class UserNode(DjangoObjectType):
|
||||
pk = graphene.Int()
|
||||
|
|
@ -46,6 +51,37 @@ class UserNode(DjangoObjectType):
|
|||
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):
|
||||
me = graphene.Field(UserNode)
|
||||
all_users = DjangoFilterConnectionField(UserNode)
|
||||
|
|
|
|||
Loading…
Reference in New Issue