|
|
|
|
@ -131,6 +131,8 @@ class MaterialViewSet(ExtendedModelViewSet): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LikeViewSet(ExtendedModelViewSet): |
|
|
|
|
OBJ_TYPE_CONTEST_WORK = 'contest_work' |
|
|
|
|
|
|
|
|
|
queryset = Like.objects.select_related('user').all() |
|
|
|
|
serializer_class = LikeCreateSerializer |
|
|
|
|
serializer_class_map = { |
|
|
|
|
@ -143,6 +145,28 @@ class LikeViewSet(ExtendedModelViewSet): |
|
|
|
|
# FIXME |
|
|
|
|
authentication_classes = [] |
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs): |
|
|
|
|
serializer = self.get_serializer(data=request.data) |
|
|
|
|
serializer.is_valid(raise_exception=True) |
|
|
|
|
obj_type = request.data.get('obj_type') |
|
|
|
|
obj_id = request.data.get('obj_id') |
|
|
|
|
user = serializer.validated_data.get('user') |
|
|
|
|
if not user.is_active: # FIXME and user.is_authenticated): |
|
|
|
|
return Response(status=status.HTTP_403_FORBIDDEN) |
|
|
|
|
if obj_type == self.OBJ_TYPE_CONTEST_WORK: |
|
|
|
|
contest_work = ContestWork.objects.get(pk=obj_id) |
|
|
|
|
if contest_work.user == user: |
|
|
|
|
return Response({'error': u'Нельзя голосовать за свою работу'}, status=status.HTTP_400_BAD_REQUEST) |
|
|
|
|
if contest_work.likes.filter(user=user).exists(): |
|
|
|
|
return Response({'error': u'Вы уже голосовали за эту работу'}, status=status.HTTP_400_BAD_REQUEST) |
|
|
|
|
if contest_work.contest.finished: |
|
|
|
|
return Response({'error': u'Голосование закончено'}, status=status.HTTP_400_BAD_REQUEST) |
|
|
|
|
instance = serializer.save() |
|
|
|
|
if obj_type == self.OBJ_TYPE_CONTEST_WORK: |
|
|
|
|
contest_work.likes.add(instance) |
|
|
|
|
headers = self.get_success_headers(serializer.data) |
|
|
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryViewSet(ExtendedModelViewSet): |
|
|
|
|
queryset = Category.objects.order_by('-id') |
|
|
|
|
|