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

feature/fix_generate_pass
Andrey 8 years ago
parent 28813344a1
commit f9bc093cdb
  1. 11
      courses/api.py
  2. 20
      progress/migrations/0002_auto_20180202_1414.py
  3. 4
      progress/models.py
  4. 26
      progress/tasks.py
  5. 27
      progress/views.py

@ -21,7 +21,6 @@ class InApiTeacher:
class CourseProgressApi: class CourseProgressApi:
@staticmethod @staticmethod
def get_topic_lesson(course_token: str): def get_topic_lesson(course_token: str):
course = Course.objects.get(token=course_token) course = Course.objects.get(token=course_token)
@ -36,10 +35,12 @@ class CourseProgressApi:
:return: следующий урок для прохождения и требует ли он валидации :return: следующий урок для прохождения и требует ли он валидации
""" """
course = Course.objects.get(token=course_token) course = Course.objects.get(token=course_token)
acc = None acc = []
include_lesson = True
for lesson in course.get_lesson_list(): for lesson in course.get_lesson_list():
if not lesson.token in lesson_list: if not lesson.token in lesson_list and include_lesson:
acc = (lesson.token, lesson.is_hm) acc.append((lesson.token, lesson.is_hm))
break else:
include_lesson = True
return acc return acc

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-02-02 14:14
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('progress', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='progresslesson',
name='status',
field=models.CharField(choices=[('start', 'start'), ('done', 'done'), ('wait', 'wait'), ('fail', 'fail')], default='start', max_length=20),
),
]

@ -52,8 +52,8 @@ class ProgressLesson(models.Model):
checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь", ) checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь", )
finish_date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) finish_date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True)
start_date = models.DateTimeField(verbose_name='Дата начала прохождения задания', auto_now_add=True) start_date = models.DateTimeField(verbose_name='Дата начала прохождения задания', auto_now_add=True)
STATUSES = Choices('done', 'wait', 'fail') STATUSES = Choices('start', 'done', 'wait', 'fail')
status = models.CharField(choices=STATUSES, default=STATUSES.wait, max_length=20) status = models.CharField(choices=STATUSES, default=STATUSES.start, max_length=20)
comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=[]) comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=[])
def __str__(self): def __str__(self):

@ -3,18 +3,28 @@ from progress.models import ProgressLesson
def add_next_lesson(progress): def add_next_lesson(progress):
lesson, is_hw = CourseProgressApi.get_next( lesson_list = CourseProgressApi.get_next(
progress.course_token, progress.course_token,
[i.lesson_token for i in progress.progresslesson_set.all()] [i.lesson_token for i in progress.progresslesson_set.all()]
) )
if is_hw: last_lesson = None
ProgressLesson.objects.get(
progress=progress,
lesson_token=lesson,
checker=progress.teacher,
)
progress.active_lesson = lesson for lesson, is_hw in lesson_list:
if is_hw:
ProgressLesson.objects.get(
progress=progress,
lesson_token=lesson,
checker=progress.teacher,
)
else:
ProgressLesson.objects.get(
progress=progress,
lesson_token=lesson,
checker=progress.user,
)
last_lesson = lesson
progress.active_lesson = last_lesson
progress.save() progress.save()
return "access update course %s" % progress.course_token return "access update course %s" % progress.course_token

@ -65,7 +65,7 @@ class UpdateProgress(APIView):
lesson_token = request.JSON.get('lesson_token', None) lesson_token = request.JSON.get('lesson_token', None)
course_token = request.JSON.get('course_token', None) course_token = request.JSON.get('course_token', None)
student_out_key = request.JSON.get('student_out_key', None) student_out_key = request.JSON.get('student_out_key', None)
action = request.JSON.get('action', 'wait') action = request.JSON.get('action', None)
comment = request.JSON.get('comment', None) comment = request.JSON.get('comment', None)
if lesson_token is None or course_token is None: if lesson_token is None or course_token is None:
@ -83,20 +83,25 @@ class UpdateProgress(APIView):
course_token=course_token, course_token=course_token,
) )
if p.active_lesson == lesson_token:
return Response("Ошибка доступа", status=403)
try: try:
pv = ProgressLesson.objects.get( pv = ProgressLesson.objects.get(
progress=p, progress=p,
lesson_token=p.active_lesson, lesson_token=lesson_token,
) )
if is_student and pv.status == ProgressLesson.STATUSES.fail and action == "wait": if is_student and not pv.status == ProgressLesson.STATUSES.wait\
pv.status = ProgressLesson.STATUSES.wait and not pv.status == ProgressLesson.STATUSES.done:
if pv.checker == p.teacher:
pv.status = ProgressLesson.STATUSES.wait
elif pv.checker == p.user:
pv.status = ProgressLesson.STATUSES.done
else:
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
pv.finish_date = datetime.datetime.now()
else: else:
return Response("Ошибка прав доступа", status=403) return Response("Ошибка прав доступа", status=403)
@ -104,13 +109,7 @@ class UpdateProgress(APIView):
pv.comment_tokens.append(comment) pv.comment_tokens.append(comment)
except ProgressLesson.DoesNotExist: except ProgressLesson.DoesNotExist:
pv = ProgressLesson.objects.create( return Response('Урок не проходится этим пользователем', status=403)
date=datetime.datetime.now(),
teacher=p.teacher,
progress=p,
lesson_token=p.active_lesson,
status=ProgressLesson.STATUSES.done
)
pv.save() pv.save()

Loading…
Cancel
Save