From 0f6786fb135cabeded10e1e55cf8ba8107c2dd33 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Mon, 9 Sep 2019 10:25:34 +0300 Subject: [PATCH] favorites refactoring --- apps/establishment/serializers.py | 3 ++- apps/establishment/urls/common.py | 4 ++-- apps/establishment/views.py | 10 ++++------ apps/utils/exceptions.py | 9 +++++++++ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/establishment/serializers.py b/apps/establishment/serializers.py index 37d0e9f2..ed3d1212 100644 --- a/apps/establishment/serializers.py +++ b/apps/establishment/serializers.py @@ -9,6 +9,7 @@ from location.serializers import AddressSerializer from main.serializers import MetaDataContentSerializer, AwardSerializer, CurrencySerializer from review import models as review_models from timetable.models import Timetable +from utils import exceptions as utils_exceptions class ContactPhonesSerializer(serializers.ModelSerializer): @@ -293,7 +294,7 @@ class EstablishmentFavoritesCreateSerializer(serializers.ModelSerializer): if self.get_user().favorites.by_content_type(app_label='establishment', model='establishment', object_id=establishment_id).exists(): - raise serializers.ValidationError() + raise utils_exceptions.FavoritesError() attrs['establishment'] = establishment_qs.first() return attrs diff --git a/apps/establishment/urls/common.py b/apps/establishment/urls/common.py index 96eef061..12745c51 100644 --- a/apps/establishment/urls/common.py +++ b/apps/establishment/urls/common.py @@ -13,6 +13,6 @@ urlpatterns = [ name='create-comment'), path('/comment//', views.EstablishmentCommentRUDView.as_view(), name='rud-comment'), - path('/favorites/', views.EstablishmentFavoritesCreateView.as_view()), - path('/favorites//', views.EstablishmentFavoritesDestroyView.as_view()), + path('/favorites/add/', views.EstablishmentFavoritesCreateView.as_view()), + path('/favorites/delete/', views.EstablishmentFavoritesDestroyView.as_view()), ] \ No newline at end of file diff --git a/apps/establishment/views.py b/apps/establishment/views.py index dd7b003e..6324f17c 100644 --- a/apps/establishment/views.py +++ b/apps/establishment/views.py @@ -6,7 +6,6 @@ from rest_framework import generics, permissions from comment import models as comment_models from establishment import filters from establishment import models, serializers -from favorites import models as favorites_models from utils.views import JWTGenericViewMixin @@ -83,7 +82,6 @@ class EstablishmentCommentRUDView(generics.RetrieveUpdateDestroyAPIView): class EstablishmentFavoritesCreateView(generics.CreateAPIView): """View for adding establishment to favorites.""" serializer_class = serializers.EstablishmentFavoritesCreateSerializer - queryset = favorites_models.Favorites.objects.all() class EstablishmentFavoritesDestroyView(generics.DestroyAPIView): @@ -93,7 +91,7 @@ class EstablishmentFavoritesDestroyView(generics.DestroyAPIView): """ Returns the object the view is displaying. """ - lookup_url_kwargs = ('pk', 'favorites_id') + lookup_url_kwargs = ('pk',) assert lookup_url_kwargs not in self.kwargs.keys(), ( 'Expected view %s to be called with a URL keyword argument ' 'named "%s". Fix your URL conf, or set the `.lookup_field` ' @@ -102,10 +100,10 @@ class EstablishmentFavoritesDestroyView(generics.DestroyAPIView): ) obj = get_object_or_404( - self.request.user.favorites.by_content_type(app_label='establishment', + self.request.user.favorites.by_user(user=self.request.user) + .by_content_type(app_label='establishment', model='establishment', - object_id=self.kwargs['pk']) - .filter(id=self.kwargs['favorites_id'])) + object_id=self.kwargs['pk'])) # May raise a permission denied self.check_object_permissions(self.request, obj) return obj diff --git a/apps/utils/exceptions.py b/apps/utils/exceptions.py index fcb40b45..b2730b97 100644 --- a/apps/utils/exceptions.py +++ b/apps/utils/exceptions.py @@ -133,3 +133,12 @@ class WrongAuthCredentials(AuthErrorMixin): The exception should be raised when credentials is not valid for this user """ default_detail = _('Wrong authorization credentials') + + +class FavoritesError(exceptions.APIException): + """ + The exception should be thrown when you item that user + want add to favorites already exists. + """ + status_code = status.HTTP_400_BAD_REQUEST + default_detail = _('Item is already in favorites.')