Add backend code to generate school class codes
This commit is contained in:
parent
4bd2c9c065
commit
2fbc70f459
|
|
@ -0,0 +1,11 @@
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from notes.models import ContentBlockBookmark, ModuleBookmark, ChapterBookmark
|
||||||
|
from users.models import SchoolClass
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
self.stdout.write("Generating School Class codes")
|
||||||
|
for sc in SchoolClass.objects.filter(code__isnull=True):
|
||||||
|
sc.generate_code()
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import re
|
import re
|
||||||
|
import string
|
||||||
|
import random
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import AbstractUser, Permission
|
from django.contrib.auth.models import AbstractUser, Permission
|
||||||
|
|
@ -113,6 +115,17 @@ class SchoolClass(models.Model):
|
||||||
def get_teacher(self):
|
def get_teacher(self):
|
||||||
return self.users.filter(user_roles__role__key='teacher').first()
|
return self.users.filter(user_roles__role__key='teacher').first()
|
||||||
|
|
||||||
|
def generate_code(self):
|
||||||
|
letters = string.ascii_lowercase
|
||||||
|
digits = string.digits
|
||||||
|
code = ''.join(random.choice(letters) for i in range(4)) + ''.join(random.choice(digits) for i in range(2))
|
||||||
|
try:
|
||||||
|
SchoolClass.objects.get(code=code)
|
||||||
|
self.generate_code()
|
||||||
|
except SchoolClass.DoesNotExist:
|
||||||
|
self.code = code.upper()
|
||||||
|
self.save()
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if self.code == '': # '' can't be unique, so we null it
|
if self.code == '': # '' can't be unique, so we null it
|
||||||
self.code = None
|
self.code = None
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ 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')
|
members = graphene.List('users.schema.ClassMemberNode')
|
||||||
|
code = graphene.String()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SchoolClass
|
model = SchoolClass
|
||||||
|
|
@ -28,6 +29,13 @@ class SchoolClassNode(DjangoObjectType):
|
||||||
def resolve_members(self, info, **kwargs):
|
def resolve_members(self, info, **kwargs):
|
||||||
return SchoolClassMember.objects.filter(school_class=self)
|
return SchoolClassMember.objects.filter(school_class=self)
|
||||||
|
|
||||||
|
def resolve_code(self, info, **kwargs):
|
||||||
|
if not info.context.user.is_teacher():
|
||||||
|
return None
|
||||||
|
if self.code is None:
|
||||||
|
self.generate_code()
|
||||||
|
return self.code
|
||||||
|
|
||||||
|
|
||||||
class UserNode(DjangoObjectType):
|
class UserNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue