Yandex_update

remotes/origin/dev2
Andrey 8 years ago
parent f2f0f8cc44
commit ef3e132431
  1. 3
      courses/tasks.py
  2. 54
      courses/views.py
  3. 11
      progress/views.py

@ -1,4 +1,5 @@
from progress.models import ProgressLesson, Progress from progress.models import ProgressLesson, Progress
from django.contrib.auth import get_user_model
def add_lesson(user_out_key: str, course_token: str, lesson_token: str, teacher_key: str, is_hm: bool): def add_lesson(user_out_key: str, course_token: str, lesson_token: str, teacher_key: str, is_hm: bool):
@ -8,5 +9,5 @@ def add_lesson(user_out_key: str, course_token: str, lesson_token: str, teacher_
ProgressLesson.objects.get_or_create( ProgressLesson.objects.get_or_create(
progress=p, progress=p,
lesson_token=lesson_token, lesson_token=lesson_token,
checker=user_out_key if is_hm else teacher_key, checker=get_user_model().objects.get(out_key=(teacher_key if is_hm else user_out_key)),
) )

@ -108,41 +108,43 @@ class LessonDetail(APIView):
l = LessonSerializer(lesson).data l = LessonSerializer(lesson).data
if not lesson.free: try:
if jwt_token is None: payload = None if jwt_token is None\
return Response("Ошибка доступа", status=403) else jwt.decode(jwt_token, settings.COURSE_PROGRESS_SECRET_KEY, algorithms=['HS256'])
except DecodeError:
payload = None
course = lesson.topic.course
try: if payload is None:
payload = jwt.decode(jwt_token, settings.COURSE_PROGRESS_SECRET_KEY, algorithms=['HS256']) if not lesson.free:
except DecodeError:
return Response("Bad token", status=400) return Response("Bad token", status=400)
try: else:
course = Course.objects.get(token=payload['course_token']) return Response(l, status=200)
except Course.DoesNotExist:
return Response("Course not found", status=404) prev_lesson = course.get_previous(lesson, (lambda x: not x.is_hm) if payload['only_watch'] else None)
next_lesson = course.get_next(lesson, (lambda x: not x.is_hm) if payload['only_watch'] else None)
prev_lesson = course.get_previous(lesson, (lambda x: not x.is_hm) if payload['only_watch'] else None) if not prev_lesson is None:
next_lesson = course.get_next(lesson, (lambda x: not x.is_hm) if payload['only_watch'] else None) l['prev_token'] = prev_lesson.token
if not prev_lesson is None: if not next_lesson is None:
l['prev_token'] = prev_lesson.token l['next_token'] = next_lesson.token
if not next_lesson is None: new_lesson = False
l['next_token'] = next_lesson.token for payload_lesson in payload['lessons']:
if payload_lesson['lesson_token'] == str(lesson.token):
return Response(l, status=200)
new_lesson = False if not prev_lesson is None and str(prev_lesson.token) == payload_lesson['lesson_token']:
for payload_lesson in payload['lessons']:
if payload_lesson['lesson_token'] == str(lesson.token):
return Response(l, status=200)
new_lesson = True if prev_lesson is None else \ new_lesson = True if prev_lesson is None else \
((payload_lesson['status'] == "done" or payload_lesson['status'] == "wait") (payload_lesson['status'] == "done" or payload_lesson['status'] == "wait")
if prev_lesson.token == payload_lesson['lesson_token'] else False)
if not new_lesson: if not new_lesson:
return Response("Permission denied", status=403) return Response("Permission denied", status=403)
#TODO Задача для селери #TODO Задача для селери
add_lesson(request.user.out_key, course.token, lesson.token, course.get_teacher(), lesson.is_hm) add_lesson(request.user.out_key, course.token, lesson.token, course.get_teacher(), lesson.is_hm)
return Response(l, status=200) return Response(l, status=200)

@ -14,7 +14,8 @@ from django.db.models import Q
from courses.models import Course from courses.models import Course
from progress.models import ProgressLesson, Progress 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 courses.api import CourseProgressApi, CourseParamsApi
from progress.tasks import add_next_lesson from progress.tasks import add_next_lesson
@ -203,13 +204,9 @@ class StudentUpdateProgress(APIView):
pv.save() pv.save()
else: else:
return Response("Ошибка прав доступа", status=403) pass
if pv.status == ProgressLesson.STATUSES.done: return Response(SecureProgressSerializer(pv.progress).data, status=200)
# TODO: Ассинхроннаязадача для celery
add_next_lesson(pv.progress)
return Response(ProgressSerializer(pv.progress).data, status=200)
except Progress.DoesNotExist: except Progress.DoesNotExist:
return Response('Не найден прогресс по заданным параметрам', status=404) return Response('Не найден прогресс по заданным параметрам', status=404)

Loading…
Cancel
Save