Add backend code to generate school class codes

This commit is contained in:
Ramon Wenger 2020-03-20 22:51:05 +01:00
parent 4bd2c9c065
commit 2fbc70f459
3 changed files with 32 additions and 0 deletions

View File

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

View File

@ -1,4 +1,6 @@
import re
import string
import random
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser, Permission
@ -113,6 +115,17 @@ class SchoolClass(models.Model):
def get_teacher(self):
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):
if self.code == '': # '' can't be unique, so we null it
self.code = None

View File

@ -16,6 +16,7 @@ from users.models import User, SchoolClass, SchoolClassMember
class SchoolClassNode(DjangoObjectType):
pk = graphene.Int()
members = graphene.List('users.schema.ClassMemberNode')
code = graphene.String()
class Meta:
model = SchoolClass
@ -28,6 +29,13 @@ class SchoolClassNode(DjangoObjectType):
def resolve_members(self, info, **kwargs):
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):
pk = graphene.Int()