From 2fbc70f4597ac1b4b67d2ccd28d18ee0c774c8df Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Fri, 20 Mar 2020 22:51:05 +0100 Subject: [PATCH] Add backend code to generate school class codes --- server/core/management/commands/generate_codes.py | 11 +++++++++++ server/users/models.py | 13 +++++++++++++ server/users/schema.py | 8 ++++++++ 3 files changed, 32 insertions(+) create mode 100644 server/core/management/commands/generate_codes.py diff --git a/server/core/management/commands/generate_codes.py b/server/core/management/commands/generate_codes.py new file mode 100644 index 00000000..b3c9199a --- /dev/null +++ b/server/core/management/commands/generate_codes.py @@ -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() diff --git a/server/users/models.py b/server/users/models.py index d37487f5..91c9fd78 100644 --- a/server/users/models.py +++ b/server/users/models.py @@ -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 diff --git a/server/users/schema.py b/server/users/schema.py index 570b9fcd..e76162c7 100644 --- a/server/users/schema.py +++ b/server/users/schema.py @@ -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()