finance logging

remotes/origin/yandex_rebiling
Andrey 8 years ago
parent 7506946cd4
commit 08b4a28e6e
  1. 14
      courses/serializers.py
  2. 2
      courses/urls.py
  3. 92
      courses/views.py

@ -1,6 +1,8 @@
from rest_framework import serializers
from django.conf import settings
from courses.models import Course, Lesson, Topic
import os
class TopicSerializer(serializers.ModelSerializer):
@ -19,11 +21,12 @@ class MiniLessonSerializer(serializers.ModelSerializer):
class Meta:
model = Lesson
fields = ('title', 'free', 'token', 'is_hm')
fields = ('title', 'free', 'token', 'is_hm', 'sort')
class LessonSerializer(MiniLessonSerializer):
course_slug = serializers.SerializerMethodField()
materials = serializers.SerializerMethodField()
class Meta:
model = Lesson
@ -33,6 +36,15 @@ class LessonSerializer(MiniLessonSerializer):
def get_course_slug(self):
return self.topic.course.slug
@staticmethod
def get_materials(self):
try:
prefix = 'course/%s/%s/%s' % (self.topic.course.token, self.topic.id, self.token)
name_list = os.listdir('%s/%s/' % (settings.MEDIA_ROOT, prefix))
return ["%s%s/%s" % (settings.MEDIA_URL, prefix, i) for i in name_list]
except FileNotFoundError:
return []
class TeacherLessonSerializer(MiniLessonSerializer):
topic_sort = serializers.SerializerMethodField()

@ -3,6 +3,8 @@ from django.conf.urls import url
from courses import views as views
urlpatterns = [
url(r'lesson/update/$', views.UpdateLessonView.as_view()),
url(r'lesson/delete/(?P<lesson_token>.+)/$', views.DeleteLessonView.as_view()),
url(r'lesson/teacher/(?P<token>.+)/$', views.LessonInfoView.as_view()),
url(r'lesson/(?P<token>.+)/$', views.LessonDetail.as_view()),
url(r'tree/(?P<slug>.+)/$', views.TreeView.as_view()),

@ -1,19 +1,16 @@
from django.db.models import F
from jwt import DecodeError
from courses.models import Course, Lesson, Topic
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from django.contrib.auth import get_user_model
from courses.serializers import CourseDetailSerializer, CourseTreeSerializer, LessonSerializer, TeacherLessonSerializer, \
TopicSerializer
from courses.serializers import CourseDetailSerializer, CourseTreeSerializer, LessonSerializer, TeacherLessonSerializer
import jwt
from courses.tasks import add_lesson
from lms import settings
import json
class TreeView(APIView):
renderer_classes = (JSONRenderer,)
@ -66,12 +63,84 @@ class DeleteTopicView(APIView):
@staticmethod
def delete(request, topic_id):
if request.user and request.user.is_staff:
try:
t = Topic.objects.get(id=topic_id)
except Topic.DoesNotExist:
return Response("Темы не существует", status=404)
t.delete()
return Response(CourseTreeSerializer(t.course).data, status=200)
class DeleteLessonView(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def delete(request, lesson_token):
if request.user and request.user.is_staff:
try:
l = Lesson.objects.get(token=lesson_token)
except Lesson.DoesNotExist:
return Response("Темы не существует", status=404)
l.delete()
return Response(CourseTreeSerializer(l.topic.course).data, status=200)
class UpdateLessonView(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def post(request):
lesson_token = request.JSON.get('token', None)
sort = request.JSON.get('sort', None)
topic_id = request.JSON.get('topic', None)
title = request.JSON.get('title', None)
description = request.JSON.get('description', None)
video = request.JSON.get('video', None)
free = request.JSON.get('free', None)
is_hm = request.JSON.get('is_hm', None)
if topic_id is None:
return Response("topic не передан", status=400)
if sort is None:
return Response("sort не передан", status=400)
try:
t = Topic.objects.get(id=topic_id)
topic = Topic.objects.get(id=topic_id)
except Topic.DoesNotExist:
return Response("Темы не существует", status=404)
t.delete()
return Response(CourseTreeSerializer(t.course).data, status=200)
return Response("Тема не найдена", status=404)
if lesson_token is None:
if title is None:
return Response("Название урока не переданно", status=400)
for lesson in reversed(topic.lesson_set.filter(sort__gte=sort)):
lesson.sort = lesson.sort + 1
lesson.save()
l = Lesson.objects.create(
title=title,
topic=topic,
sort=sort,
)
else:
try:
l = Lesson.objects.get(token=lesson_token)
except Lesson.DoesNotExist:
return Response("Урок не найден", status=404)
l.title = l.title if title is None else title
l.video = l.video if video is None else video
l.free = l.free if free is None else free
l.is_hm = l.is_hm if is_hm is None else is_hm
l.description = l.description if description is None else description
if not l.sort == sort:
for lesson in reversed(topic.lesson_set.filter(sort__gte=sort)):
lesson.sort = lesson.sort + 1
lesson.save()
l.sort = sort
l.save()
return Response(CourseTreeSerializer(topic.course).data, status=200)
class UpdateTopicView(APIView):
@ -99,7 +168,7 @@ class UpdateTopicView(APIView):
if topic_id:
t = Topic.objects.get(id=topic_id)
if not t.sort == sort:
for topic in reversed():
for topic in reversed(course.topic_set.filter(sort__gte=sort)):
topic.sort = topic.sort + 1
topic.save()
t.sort = sort
@ -161,7 +230,8 @@ class LessonDetail(APIView):
course = lesson.topic.course
if payload is None:
if not lesson.free:
if not (lesson.free or request.user.is_authenticated and
(request.user.groups.filter(name__in=['supports']).exists() or request.user.is_superuser)):
return Response("Bad token", status=400)
else:

Loading…
Cancel
Save