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 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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue