diff --git a/apps/establishment/serializers.py b/apps/establishment/serializers.py index 46d46439..c297ce54 100644 --- a/apps/establishment/serializers.py +++ b/apps/establishment/serializers.py @@ -125,22 +125,20 @@ class EstablishmentEmployeeSerializer(serializers.ModelSerializer): fields = ('id', 'name', 'position_translated', 'awards') -class EstablishmentListSerializer(serializers.ModelSerializer): - """Serializer for Establishment model.""" - +class EstablishmentBaseSerializer(serializers.ModelSerializer): + """Base serializer for Establishment model.""" name_translated = serializers.CharField(allow_null=True) type = EstablishmentTypeSerializer(source='establishment_type') subtypes = EstablishmentSubTypeSerializer(many=True) address = AddressSerializer() tags = MetaDataContentSerializer(many=True) preview_image = serializers.SerializerMethodField() - in_favorites = serializers.BooleanField() class Meta: """Meta class.""" model = models.Establishment - fields = ( + fields = [ 'id', 'name_translated', 'price_level', @@ -151,8 +149,7 @@ class EstablishmentListSerializer(serializers.ModelSerializer): 'preview_image', 'address', 'tags', - 'in_favorites', - ) + ] def get_preview_image(self, obj): """Get preview image""" @@ -160,6 +157,20 @@ class EstablishmentListSerializer(serializers.ModelSerializer): thumbnail_key='establishment_preview') +class EstablishmentListSerializer(EstablishmentBaseSerializer): + """Serializer for Establishment model.""" + # Annotated fields + in_favorites = serializers.BooleanField(allow_null=True) + + class Meta: + """Meta class.""" + + model = models.Establishment + fields = EstablishmentBaseSerializer.Meta.fields + [ + 'in_favorites', + ] + + class EstablishmentDetailSerializer(EstablishmentListSerializer): """Serializer for Establishment model.""" description_translated = serializers.CharField(allow_null=True) @@ -184,7 +195,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): """Meta class.""" model = models.Establishment - fields = EstablishmentListSerializer.Meta.fields + ( + fields = EstablishmentListSerializer.Meta.fields + [ 'description_translated', 'price_level', 'image', @@ -202,7 +213,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): 'menu', 'best_price_menu', 'best_price_carte', - ) + ] def get_review(self, obj): """Serializer method for getting last published review""" diff --git a/apps/favorites/serializers.py b/apps/favorites/serializers.py index a759c6cd..d4485c54 100644 --- a/apps/favorites/serializers.py +++ b/apps/favorites/serializers.py @@ -1 +1,17 @@ """Serializers for app favorites.""" +from .models import Favorites +from rest_framework import serializers +from establishment.serializers import EstablishmentBaseSerializer + + +class FavoritesEstablishmentListSerializer(serializers.ModelSerializer): + """Serializer for model Favorites""" + detail = EstablishmentBaseSerializer(source='content_object') + + class Meta: + """Meta class.""" + model = Favorites + fields = ( + 'id', + 'detail', + ) diff --git a/apps/favorites/urls.py b/apps/favorites/urls.py new file mode 100644 index 00000000..4b8e8088 --- /dev/null +++ b/apps/favorites/urls.py @@ -0,0 +1,12 @@ +"""Favorites urlpaths.""" +from django.urls import path +from . import views + + +app_name = 'favorites' + +urlpatterns = [ + path('establishments/', views.FavoritesEstablishmentListView.as_view(), + name='establishment-list'), + path('remove//', views.FavoritesDestroyView.as_view(), name='delete-favorites'), +] diff --git a/apps/favorites/views.py b/apps/favorites/views.py new file mode 100644 index 00000000..c35edcf5 --- /dev/null +++ b/apps/favorites/views.py @@ -0,0 +1,25 @@ +"""Views for app favorites.""" +from rest_framework import generics +from .serializers import FavoritesEstablishmentListSerializer +from .models import Favorites + + +class FavoritesBaseView(generics.GenericAPIView): + """Base view for Favorites.""" + def get_queryset(self): + """Override get_queryset method.""" + return Favorites.objects.by_user(self.request.user) + + +class FavoritesEstablishmentListView(FavoritesBaseView, generics.ListAPIView): + """List views for favorites""" + serializer_class = FavoritesEstablishmentListSerializer + + def get_queryset(self): + """Override get_queryset method""" + return super().get_queryset().by_content_type(app_label='establishment', + model='establishment') + + +class FavoritesDestroyView(FavoritesBaseView, generics.DestroyAPIView): + """Destroy view for favorites""" diff --git a/project/urls/web.py b/project/urls/web.py index b7f67722..803f7243 100644 --- a/project/urls/web.py +++ b/project/urls/web.py @@ -29,4 +29,5 @@ urlpatterns = [ path('main/', include('main.urls')), path('translation/', include('translation.urls')), path('comments/', include('comment.urls.web')), + path('favorites/', include('favorites.urls')), ]