diff --git a/api/v1/__init__.py b/api/v1/__init__.py index 45967a33..a8299561 100644 --- a/api/v1/__init__.py +++ b/api/v1/__init__.py @@ -43,3 +43,20 @@ class ExtendViewSet(object): class ExtendedModelViewSet(ExtendViewSet, viewsets.ModelViewSet): pass + + +class BothListFormatMixin: + + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + + if request.query_params.get('page'): + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + else: + return Response({'results': []}) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) diff --git a/api/v1/views.py b/api/v1/views.py index 130468ec..f43ca18a 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -10,7 +10,7 @@ from rest_framework.decorators import (detail_route, list_route, action, from rest_framework.response import Response from rest_framework.settings import api_settings -from . import ExtendedModelViewSet +from . import ExtendedModelViewSet, BothListFormatMixin from .serializers.config import ConfigSerializer from .serializers.course import ( @@ -213,7 +213,7 @@ class LikeViewSet(ExtendedModelViewSet): return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) -class CategoryViewSet(ExtendedModelViewSet): +class CategoryViewSet(BothListFormatMixin, ExtendedModelViewSet): queryset = Category.objects.order_by('-id') serializer_class = CategorySerializer search_fields = ('title',) @@ -221,7 +221,7 @@ class CategoryViewSet(ExtendedModelViewSet): # permission_classes = (IsAdmin,) -class CourseViewSet(ExtendedModelViewSet): +class CourseViewSet(BothListFormatMixin, ExtendedModelViewSet): queryset = Course.objects.select_related( 'author', 'category', 'cover', 'gallery', ).prefetch_related( @@ -243,20 +243,6 @@ class CourseViewSet(ExtendedModelViewSet): # 'delete': IsAdmin, # } - def list(self, request, *args, **kwargs): - queryset = self.filter_queryset(self.get_queryset()) - - if request.query_params.get('page'): - page = self.paginate_queryset(queryset) - if page is not None: - serializer = self.get_serializer(page, many=True) - return self.get_paginated_response(serializer.data) - else: - return Response({'results': []}) - - serializer = self.get_serializer(queryset, many=True) - return Response(serializer.data) - @list_route(methods=['get']) def draft(self, request): drafts = Course.objects.filter(author=request.user, status=Course.DRAFT) @@ -735,7 +721,7 @@ class FAQViewSet(ExtendedModelViewSet): serializer_class = FAQSerializer -class BonusesViewSet(ExtendedModelViewSet): +class BonusesViewSet(BothListFormatMixin, ExtendedModelViewSet): queryset = UserBonus.objects.all() serializer_class = UserBonusCreateSerializer serializer_class_map = { @@ -752,15 +738,3 @@ class BonusesViewSet(ExtendedModelViewSet): 'referral__referral__first_name', 'referral__referral__last_name', ) - - def list(self, request, *args, **kwargs): - queryset = self.filter_queryset(self.get_queryset()) - - if request.query_params.get('page'): - page = self.paginate_queryset(queryset) - if page is not None: - serializer = self.get_serializer(page, many=True) - return self.get_paginated_response(serializer.data) - - serializer = self.get_serializer(queryset, many=True) - return Response(serializer.data) diff --git a/apps/course/management/commands/fix_access_expire.py b/apps/course/management/commands/fix_access_expire.py index cf15f5ff..2570e8e0 100644 --- a/apps/course/management/commands/fix_access_expire.py +++ b/apps/course/management/commands/fix_access_expire.py @@ -23,3 +23,18 @@ class Command(BaseCommand): payment.save() +''' +TEST + +select c.id, c.title, cp.access_duration +from + course_course c, + (select cp.course_id, count(*), cp.access_expire - date_trunc('day', p.created_at) access_duration + from payment_coursepayment cp, + payment_payment p + where p.id = cp.payment_ptr_id and p.status = 0 + group by cp.course_id, cp.access_expire - date_trunc('day', p.created_at)) cp +where cp.course_id = c.id +order by c.title +''' + diff --git a/web/src/components/CourseRedactor.vue b/web/src/components/CourseRedactor.vue index 3e319cea..5bc06549 100644 --- a/web/src/components/CourseRedactor.vue +++ b/web/src/components/CourseRedactor.vue @@ -892,7 +892,7 @@ promises.push(cats); cats.then((response) => { if (response.data) { - this.categoryOptions = response.data.results; + this.categoryOptions = response.data; } });