favorites refactoring

This commit is contained in:
Anatoly 2019-09-09 10:25:34 +03:00
parent e6144d8f33
commit 0f6786fb13
4 changed files with 17 additions and 9 deletions

View File

@ -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

View File

@ -13,6 +13,6 @@ urlpatterns = [
name='create-comment'),
path('<int:pk>/comment/<int:comment_id>/', views.EstablishmentCommentRUDView.as_view(),
name='rud-comment'),
path('<int:pk>/favorites/', views.EstablishmentFavoritesCreateView.as_view()),
path('<int:pk>/favorites/<int:favorites_id>/', views.EstablishmentFavoritesDestroyView.as_view()),
path('<int:pk>/favorites/add/', views.EstablishmentFavoritesCreateView.as_view()),
path('<int:pk>/favorites/delete/', views.EstablishmentFavoritesDestroyView.as_view()),
]

View File

@ -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

View File

@ -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.')