From d1497bad5d7d148f10e7ebecb7ce133b91d3c4e1 Mon Sep 17 00:00:00 2001 From: lucaslinhares Date: Mon, 15 Jan 2024 17:24:50 -0300 Subject: [PATCH] list products by a catalog endpoint --- .../channels/whatsapp_cloud/catalogs/urls.py | 5 +++++ .../whatsapp_cloud/catalogs/views/views.py | 13 ++++++++++++ marketplace/wpp_products/serializers.py | 21 ++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/marketplace/core/types/channels/whatsapp_cloud/catalogs/urls.py b/marketplace/core/types/channels/whatsapp_cloud/catalogs/urls.py index 895347ff..28c4716a 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/catalogs/urls.py +++ b/marketplace/core/types/channels/whatsapp_cloud/catalogs/urls.py @@ -18,6 +18,11 @@ CatalogViewSet.as_view({"get": "retrieve", "delete": "destroy"}), name="catalog-detail-delete", ), + path( + "/catalogs//products/", + CatalogViewSet.as_view({"get": "list_products"}), + name="catalog-list-products", + ), path( "/catalogs//enable/", CatalogViewSet.as_view({"post": "enable_catalog"}), diff --git a/marketplace/core/types/channels/whatsapp_cloud/catalogs/views/views.py b/marketplace/core/types/channels/whatsapp_cloud/catalogs/views/views.py index 74ccc0ae..f4a89969 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/catalogs/views/views.py +++ b/marketplace/core/types/channels/whatsapp_cloud/catalogs/views/views.py @@ -19,6 +19,7 @@ from marketplace.wpp_products.serializers import ( CatalogSerializer, + ProductSerializer, ToggleVisibilitySerializer, TresholdSerializer, CatalogListSerializer, @@ -90,6 +91,11 @@ def get_object(self): queryset = self.get_queryset() catalog_uuid = self.kwargs.get("catalog_uuid") return get_object_or_404(queryset, uuid=catalog_uuid) + + def _get_catalog(self, catalog_uuid, app_uuid): + return get_object_or_404( + Catalog, uuid=catalog_uuid, app__uuid=app_uuid, app__code="wpp-cloud" + ) def create(self, request, app_uuid, *args, **kwargs): app = get_object_or_404(App, uuid=app_uuid, code="wpp-cloud") @@ -144,6 +150,13 @@ def list(self, request, *args, **kwargs): return self.get_paginated_response(serialized_data) + @action(detail=True, methods=["GET"], url_path="list-products") + def list_products(self, request, app_uuid, catalog_uuid, *args, **kwargs): + catalog = self._get_catalog(catalog_uuid, app_uuid) + products = catalog.products.all() + serializer = ProductSerializer(products, many=True) + return self.get_paginated_response(serializer.data) + def destroy(self, request, *args, **kwargs): success = self.fb_service.catalog_deletion(self.get_object()) if not success: diff --git a/marketplace/wpp_products/serializers.py b/marketplace/wpp_products/serializers.py index b95b22b5..262a7861 100644 --- a/marketplace/wpp_products/serializers.py +++ b/marketplace/wpp_products/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from marketplace.wpp_products.models import Catalog +from marketplace.wpp_products.models import Catalog, Product class CatalogSerializer(serializers.ModelSerializer): @@ -45,3 +45,22 @@ def to_representation(self, obj): serialized_data.insert(0, connected_data) return serialized_data + +class ProductSerializer(serializers.ModelSerializer): + title = serializers.CharField(required=True) + available = serializers.SerializerMethodField() + price = serializers.CharField() + sale_price = serializers.CharField() + facebook_product_id = serializers.CharField() + image_link = serializers.CharField() + + + class Meta: + model = Product + fields = ("title", "available", "price", "sale_price", "facebook_product_id", "image_link") + + def get_available(self, obj): + if obj.availability == 'in stock': + return True + else: + return False