Add class member node

This commit is contained in:
Ramon Wenger 2020-03-04 16:42:20 +01:00
parent 0ea72fe598
commit acdcc7ea13
2 changed files with 44 additions and 6 deletions

View File

@ -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)

View File

@ -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)