|
|
|
@ -175,47 +175,41 @@ class StudentUpdateProgress(APIView): |
|
|
|
@staticmethod |
|
|
|
@staticmethod |
|
|
|
def post(request): |
|
|
|
def post(request): |
|
|
|
lesson_token = request.JSON.get('lesson_token', None) |
|
|
|
lesson_token = request.JSON.get('lesson_token', None) |
|
|
|
course_token = request.JSON.get('course_token', 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: |
|
|
|
return Response('Не передан слаг курса или токен урока', status=400) |
|
|
|
return Response('Не передан токен урока', status=400) |
|
|
|
try: |
|
|
|
|
|
|
|
student = request.user |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p = Progress.objects.get(user=student, course_token=course_token) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
|
|
pv = ProgressLesson.objects.get( |
|
|
|
|
|
|
|
progress=p, |
|
|
|
|
|
|
|
lesson_token=lesson_token, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not pv.status == ProgressLesson.STATUSES.wait: |
|
|
|
student = request.user |
|
|
|
if pv.checker == p.teacher and not comment is None: |
|
|
|
|
|
|
|
pv.status = ProgressLesson.STATUSES.wait |
|
|
|
|
|
|
|
pv.comment_tokens.append(comment) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif pv.checker == p.user: |
|
|
|
try: |
|
|
|
pv.status = ProgressLesson.STATUSES.done |
|
|
|
pv = ProgressLesson.objects.get( |
|
|
|
pv.finish_date = datetime.datetime.now() |
|
|
|
progress__user=student, |
|
|
|
|
|
|
|
lesson_token=lesson_token, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
else: |
|
|
|
if not pv.status == ProgressLesson.STATUSES.wait: |
|
|
|
raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт") |
|
|
|
if pv.checker == pv.progress.teacher and not comment is None: |
|
|
|
|
|
|
|
pv.status = ProgressLesson.STATUSES.wait |
|
|
|
|
|
|
|
pv.comment_tokens.append(comment) |
|
|
|
|
|
|
|
|
|
|
|
pv.save() |
|
|
|
elif pv.checker == pv.progress.user: |
|
|
|
|
|
|
|
pv.status = ProgressLesson.STATUSES.done |
|
|
|
|
|
|
|
pv.finish_date = datetime.datetime.now() |
|
|
|
|
|
|
|
|
|
|
|
else: |
|
|
|
else: |
|
|
|
return Response("Ошибка прав доступа", status=403) |
|
|
|
raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт") |
|
|
|
|
|
|
|
|
|
|
|
except ProgressLesson.DoesNotExist: |
|
|
|
pv.save() |
|
|
|
return Response('Урок не проходится этим пользователем', status=403) |
|
|
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
return Response("Ошибка прав доступа", status=403) |
|
|
|
|
|
|
|
|
|
|
|
if pv.status == ProgressLesson.STATUSES.done: |
|
|
|
if pv.status == ProgressLesson.STATUSES.done: |
|
|
|
# TODO: Ассинхроннаязадача для celery |
|
|
|
# TODO: Ассинхроннаязадача для celery |
|
|
|
add_next_lesson(p) |
|
|
|
add_next_lesson(pv.progress) |
|
|
|
|
|
|
|
|
|
|
|
return Response(ProgressSerializer(p).data, status=200) |
|
|
|
return Response(ProgressSerializer(pv.progress).data, status=200) |
|
|
|
|
|
|
|
|
|
|
|
except Progress.DoesNotExist: |
|
|
|
except Progress.DoesNotExist: |
|
|
|
return Response('Не найден прогресс по заданным параметрам', status=404) |
|
|
|
return Response('Не найден прогресс по заданным параметрам', status=404) |
|
|
|
|