update api прохождения

feature/fix_generate_pass
Andrey 8 years ago
parent f9bc093cdb
commit e574d88215
  1. 94
      courses/models.py
  2. 19
      progress/migrations/0003_remove_progress_active_lesson.py
  3. 1
      progress/models.py
  4. 5
      progress/tasks.py
  5. 2
      progress/views.py

@ -26,6 +26,46 @@ COURSE_DIRECTION = (
) )
class Lesson(models.Model):
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False)
key = models.UUIDField(
verbose_name="Внутрений ключ используется для расшивровки", default=uuid.uuid4, editable=False)
topic = models.ForeignKey(to="Topic", verbose_name='Тема')
title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
video = models.TextField(verbose_name='Код видео', blank=True, null=True)
material_tokens = ArrayField(
models.UUIDField(verbose_name="Токен материала", editable=False),
default=[],
verbose_name='Материалы курса',
)
free = models.BooleanField(default=False, verbose_name='Привилегии для узла не будут проверяться')
sort = models.SmallIntegerField(unique=True)
is_hm = models.BooleanField(default=False) #TODO костыли
old_id = models.IntegerField(null=True, blank=True)
def __str__(self):
return self.title
class Meta:
verbose_name = "Урок"
verbose_name_plural = "Уроки"
ordering = ('sort', )
class Topic(models.Model):
course = models.ForeignKey(to="Course", verbose_name='курс')
title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True)
sort = models.SmallIntegerField(unique=True)
class Meta:
verbose_name = "Тема"
verbose_name_plural = "Темы"
class CourseManager(models.Manager): class CourseManager(models.Manager):
def update_or_create_course(self, image=None, big_image=None, id=0, def update_or_create_course(self, image=None, big_image=None, id=0,
@ -97,6 +137,20 @@ class Course(models.Model):
lesson_list += list(topic.lesson_set.all()) lesson_list += list(topic.lesson_set.all())
return lesson_list return lesson_list
def get_next(self, lesson: Lesson) -> Lesson:
lessons = self.get_lesson_list()
try:
return lessons[lessons.index(lesson)]
except IndexError:
pass
def get_first(self) -> Lesson:
lessons = self.get_lesson_list()
try:
return lessons[0]
except IndexError:
pass
objects = CourseManager() objects = CourseManager()
class Meta: class Meta:
@ -104,46 +158,6 @@ class Course(models.Model):
verbose_name_plural = "Курсы" verbose_name_plural = "Курсы"
class Topic(models.Model):
course = models.ForeignKey(to=Course, verbose_name='курс')
title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True)
sort = models.SmallIntegerField(unique=True)
class Meta:
verbose_name = "Тема"
verbose_name_plural = "Темы"
class Lesson(models.Model):
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False)
key = models.UUIDField(
verbose_name="Внутрений ключ используется для расшивровки", default=uuid.uuid4, editable=False)
topic = models.ForeignKey(to=Topic, verbose_name='Тема')
title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
video = models.TextField(verbose_name='Код видео', blank=True, null=True)
material_tokens = ArrayField(
models.UUIDField(verbose_name="Токен материала", editable=False),
default=[],
verbose_name='Материалы курса',
)
free = models.BooleanField(default=False, verbose_name='Привилегии для узла не будут проверяться')
sort = models.SmallIntegerField(unique=True)
is_hm = models.BooleanField(default=False) #TODO костыли
old_id = models.IntegerField(null=True, blank=True)
def __str__(self):
return self.title
class Meta:
verbose_name = "Урок"
verbose_name_plural = "Уроки"
ordering = ('sort', )
# class LessonRequirement(models.Model): # class LessonRequirement(models.Model):
# lesson = models.ForeignKey(to=Lesson) # lesson = models.ForeignKey(to=Lesson)
# requirement = models.ForeignKey(to='courses.Requirement') # requirement = models.ForeignKey(to='courses.Requirement')

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-02-02 15:32
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('progress', '0002_auto_20180202_1414'),
]
operations = [
migrations.RemoveField(
model_name='progress',
name='active_lesson',
),
]

@ -14,7 +14,6 @@ class Progress(models.Model):
related_name='teacher_progress') related_name='teacher_progress')
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент')
course_token = models.UUIDField(verbose_name="Токен курса", editable=False) course_token = models.UUIDField(verbose_name="Токен курса", editable=False)
active_lesson = models.UUIDField(verbose_name="Токен активного урока", blank=True, null=True)
def progress_status(self, sorted_token_list): def progress_status(self, sorted_token_list):
""" """

@ -8,8 +8,6 @@ def add_next_lesson(progress):
[i.lesson_token for i in progress.progresslesson_set.all()] [i.lesson_token for i in progress.progresslesson_set.all()]
) )
last_lesson = None
for lesson, is_hw in lesson_list: for lesson, is_hw in lesson_list:
if is_hw: if is_hw:
ProgressLesson.objects.get( ProgressLesson.objects.get(
@ -23,8 +21,5 @@ def add_next_lesson(progress):
lesson_token=lesson, lesson_token=lesson,
checker=progress.user, checker=progress.user,
) )
last_lesson = lesson
progress.active_lesson = last_lesson
progress.save()
return "access update course %s" % progress.course_token return "access update course %s" % progress.course_token

@ -97,7 +97,7 @@ class UpdateProgress(APIView):
elif pv.checker == p.user: elif pv.checker == p.user:
pv.status = ProgressLesson.STATUSES.done pv.status = ProgressLesson.STATUSES.done
else: else:
raise ValueError("Этого никогда не должнопроисходить но я уверен, что произойдёт") raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт")
elif not is_student and pv.status == ProgressLesson.STATUSES.wait: elif not is_student and pv.status == ProgressLesson.STATUSES.wait:
pv.status = action pv.status = action

Loading…
Cancel
Save