From 18a138db6b5c14d6a4f48c62d554bd4b2a96a627 Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 15 Aug 2018 23:15:26 +0500 Subject: [PATCH] LIL-582 --- api/v1/serializers/course.py | 17 ++++++-- api/v1/views.py | 11 ++++- apps/content/templates/content/contest.html | 9 ++-- .../templates/content/contest_work.html | 6 +-- apps/content/views.py | 1 + project/templates/blocks/header.html | 3 ++ project/templates/blocks/lil_store_js.html | 2 +- project/templates/blocks/share.html | 2 +- project/urls.py | 2 +- web/src/components/ContestWorks.vue | 23 ++++++++++- web/src/components/UploadContestWork.vue | 10 +++-- web/src/components/blocks/Likes.vue | 41 +++++++++++-------- web/src/js/modules/popup.js | 5 ++- web/src/sass/_common.sass | 12 ++++++ 14 files changed, 104 insertions(+), 40 deletions(-) diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index 88533c51..c3921890 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -1,6 +1,8 @@ from rest_framework import serializers from rest_framework.validators import UniqueValidator +from django.contrib.auth import get_user_model + from apps.course.models import ( Category, Course, Comment, CourseComment, LessonComment, @@ -21,6 +23,9 @@ from .user import UserSerializer from .mixins import DispatchContentMixin, DispatchGalleryMixin, DispatchMaterialMixin +User = get_user_model() + + class MaterialCreateSerializer(serializers.ModelSerializer): class Meta: @@ -71,16 +76,22 @@ class LikeCreateSerializer(serializers.ModelSerializer): class Meta: model = Like - fields = ['obj_type', 'obj_id'] + fields = ['user', 'obj_type', 'obj_id'] def create(self, validated_data): - user = self.context['request'].user - if not (user and user.is_authenticated): + # FIXME + if validated_data.get('user'): + user = validated_data.get('user') + else: + user = self.context['request'].user + if not user: # FIXME and user.is_authenticated): return Like() obj_type = validated_data.pop('obj_type') obj_id = validated_data.pop('obj_id') if obj_type == self.OBJ_TYPE_CONTEST_WORK: contest_work = ContestWork.objects.get(pk=obj_id) + # FIXME in prod: + # if contest_work.user == user or contest_work.likes.filter(user=user).exists(): if contest_work.likes.filter(user=user).exists(): return Like() like = Like.objects.create(user=user) diff --git a/api/v1/views.py b/api/v1/views.py index a3be3d39..e9fa7859 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -113,6 +113,8 @@ class BanerViewSet(ExtendedModelViewSet): class ImageObjectViewSet(ExtendedModelViewSet): queryset = ImageObject.objects.all() serializer_class = ImageObjectSerializer + # FIXME + authentication_classes = [] # permission_classes = (IsAuthorOrAdmin,) @@ -138,6 +140,8 @@ class LikeViewSet(ExtendedModelViewSet): search_fields = ('user__email', 'user__firstname', 'user__lastname',) ordering_fields = ('created_at', 'update_at',) # permission_classes = (IsAdmin,) + # FIXME + authentication_classes = [] class CategoryViewSet(ExtendedModelViewSet): @@ -469,8 +473,11 @@ class ContestWorkViewSet(ExtendedModelViewSet): 'retrieve': ContestWorkSerializer, } filter_fields = ('contest',) + # FIXME + authentication_classes = [] def create(self, request, *args, **kwargs): - if ContestWork.objects.filter(user=request.user).exists(): - return Response(status=status.HTTP_400_BAD_REQUEST) + # FIXME in prod: + # if ContestWork.objects.filter(user=request.user).exists(): + # return Response(status=status.HTTP_400_BAD_REQUEST) return super().create(request, *args, **kwargs) diff --git a/apps/content/templates/content/contest.html b/apps/content/templates/content/contest.html index f0ed5d37..0d8a4ad4 100644 --- a/apps/content/templates/content/contest.html +++ b/apps/content/templates/content/contest.html @@ -12,9 +12,10 @@ {{ contest.description }}
- {% if not contest_work_uploaded %} - Загрузить свою работу - {% endif %} + + Загрузить свою работу
@@ -29,7 +30,7 @@
-
Галлерея
+
Галерея
diff --git a/apps/content/templates/content/contest_work.html b/apps/content/templates/content/contest_work.html index 00f2bca3..04fdc3c4 100644 --- a/apps/content/templates/content/contest_work.html +++ b/apps/content/templates/content/contest_work.html @@ -8,13 +8,13 @@
@@ -68,7 +68,7 @@
- {% include 'templates/blocks/share.html' %} + {% include 'templates/blocks/share.html' with share_object_name='работой' %}
{% endblock content %} diff --git a/apps/content/views.py b/apps/content/views.py index 38461f16..dd22d463 100644 --- a/apps/content/views.py +++ b/apps/content/views.py @@ -28,6 +28,7 @@ class ContestView(DetailView): model = Contest context_object_name = 'contest' template_name = 'content/contest.html' + query_pk_and_slug = True def get_context_data(self, *args, **kwargs): context = super().get_context_data() diff --git a/project/templates/blocks/header.html b/project/templates/blocks/header.html index 5be001d8..38d314bf 100644 --- a/project/templates/blocks/header.html +++ b/project/templates/blocks/header.html @@ -50,6 +50,9 @@ +
{% include 'templates/blocks/user_menu.html' %} diff --git a/project/templates/blocks/lil_store_js.html b/project/templates/blocks/lil_store_js.html index e944a567..cb5eb6f8 100644 --- a/project/templates/blocks/lil_store_js.html +++ b/project/templates/blocks/lil_store_js.html @@ -4,7 +4,7 @@ staticUrl: '{% static "" %}', accessToken: '{{ request.user.auth_token }}', user: { - id: '{{ request.user.id }}', + id: {{ request.user.id|default:'null' }}, } }; diff --git a/project/templates/blocks/share.html b/project/templates/blocks/share.html index c895fe32..9bb1cb72 100644 --- a/project/templates/blocks/share.html +++ b/project/templates/blocks/share.html @@ -1,7 +1,7 @@ {% load static %}