|
|
|
|
@ -14,7 +14,8 @@ from django.db.models import Q |
|
|
|
|
|
|
|
|
|
from courses.models import Course |
|
|
|
|
from progress.models import ProgressLesson, Progress |
|
|
|
|
from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer |
|
|
|
|
from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer, \ |
|
|
|
|
SecureProgressSerializer |
|
|
|
|
from courses.api import CourseProgressApi, CourseParamsApi |
|
|
|
|
from progress.tasks import add_next_lesson |
|
|
|
|
|
|
|
|
|
@ -175,47 +176,45 @@ class StudentUpdateProgress(APIView): |
|
|
|
|
@staticmethod |
|
|
|
|
def post(request): |
|
|
|
|
lesson_token = request.JSON.get('lesson_token', None) |
|
|
|
|
course_token = request.JSON.get('course_token', None) |
|
|
|
|
comment = request.JSON.get('comment', None) |
|
|
|
|
|
|
|
|
|
if lesson_token is None or course_token is None: |
|
|
|
|
return Response('Не передан слаг курса или токен урока', status=400) |
|
|
|
|
try: |
|
|
|
|
student = request.user |
|
|
|
|
if lesson_token is None: |
|
|
|
|
return Response('Не передан токен урока', status=400) |
|
|
|
|
|
|
|
|
|
p = Progress.objects.get(user=student, course_token=course_token) |
|
|
|
|
student = request.user |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
pv = ProgressLesson.objects.get( |
|
|
|
|
progress=p, |
|
|
|
|
lesson_token=lesson_token, |
|
|
|
|
) |
|
|
|
|
try: |
|
|
|
|
pv = ProgressLesson.objects.get( |
|
|
|
|
progress__user=student, |
|
|
|
|
lesson_token=lesson_token, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if not pv.status == ProgressLesson.STATUSES.wait: |
|
|
|
|
if pv.checker == p.teacher and not comment is None: |
|
|
|
|
pv.status = ProgressLesson.STATUSES.wait |
|
|
|
|
pv.comment_tokens.append(comment) |
|
|
|
|
if pv.status == ProgressLesson.STATUSES.done: |
|
|
|
|
Response(SecureProgressSerializer(pv.progress).data, status=200) |
|
|
|
|
|
|
|
|
|
elif pv.checker == p.user: |
|
|
|
|
pv.status = ProgressLesson.STATUSES.done |
|
|
|
|
pv.finish_date = datetime.datetime.now() |
|
|
|
|
if not pv.status == ProgressLesson.STATUSES.wait: |
|
|
|
|
if pv.checker == pv.progress.user: |
|
|
|
|
pv.status = ProgressLesson.STATUSES.done |
|
|
|
|
pv.finish_date = datetime.datetime.now() |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт") |
|
|
|
|
elif not comment is None and\ |
|
|
|
|
not pv.progress.progresslesson_set.filter(status=ProgressLesson.STATUSES.wait).exists(): |
|
|
|
|
pv.status = ProgressLesson.STATUSES.wait |
|
|
|
|
pv.comment_tokens.append(comment) |
|
|
|
|
|
|
|
|
|
pv.save() |
|
|
|
|
elif comment is None: |
|
|
|
|
return Response("Не преложен комментарий", status=400) |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
return Response("Ошибка прав доступа", status=403) |
|
|
|
|
return Response("В настоящее время, мы уже проверяем одно из ваших домашних заданий. <br> Как " |
|
|
|
|
"только оно будет успешно сдано - вы сможете продолжить.", status=403) |
|
|
|
|
|
|
|
|
|
except ProgressLesson.DoesNotExist: |
|
|
|
|
return Response('Урок не проходится этим пользователем', status=403) |
|
|
|
|
elif not comment is None: |
|
|
|
|
pv.comment_tokens.append(comment) |
|
|
|
|
|
|
|
|
|
if pv.status == ProgressLesson.STATUSES.done: |
|
|
|
|
# TODO: Ассинхроннаязадача для celery |
|
|
|
|
add_next_lesson(p) |
|
|
|
|
pv.save() |
|
|
|
|
|
|
|
|
|
return Response(ProgressSerializer(p).data, status=200) |
|
|
|
|
return Response(SecureProgressSerializer(pv.progress).data, status=200) |
|
|
|
|
|
|
|
|
|
except Progress.DoesNotExist: |
|
|
|
|
return Response('Не найден прогресс по заданным параметрам', status=404) |
|
|
|
|
@ -292,6 +291,7 @@ class SetProgress(APIView): |
|
|
|
|
course_slug = request.JSON.get('course_slug', None) |
|
|
|
|
topic_sort = int(request.JSON.get('topic', 1)) |
|
|
|
|
lesson_sort = int(request.JSON.get('lesson', 1)) |
|
|
|
|
only_watch = request.JSON.get('only_watch', False) |
|
|
|
|
force = request.JSON.get('force', False) |
|
|
|
|
|
|
|
|
|
if course_slug is None: |
|
|
|
|
@ -319,6 +319,9 @@ class SetProgress(APIView): |
|
|
|
|
teacher = get_user_model().objects.get(out_key=course.get_teacher()) |
|
|
|
|
progress = Progress.objects.create(course_token=course.token, user=student, teacher=teacher) |
|
|
|
|
|
|
|
|
|
progress.only_watch = only_watch |
|
|
|
|
progress.save() |
|
|
|
|
|
|
|
|
|
token_list = [] |
|
|
|
|
lesson_list = [] |
|
|
|
|
for topic_idx, topic in enumerate(course.topic_set.all()): |
|
|
|
|
|