From 69c4d22e10aa55b6521f613646026b28bf35da98 Mon Sep 17 00:00:00 2001 From: Romain Le Cellier Date: Thu, 2 Mar 2023 14:37:58 +0100 Subject: [PATCH] [WIP] (backend) Use Response serializer in view.. ..Order.create() --- src/backend/joanie/core/api.py | 15 +++++ .../order_create_body_serializer.py | 1 + .../order_create_response_serializer.py | 60 ++++++++++++++++++- 3 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/backend/joanie/core/api.py b/src/backend/joanie/core/api.py index f44af6d41c..9a3ffb4aad 100644 --- a/src/backend/joanie/core/api.py +++ b/src/backend/joanie/core/api.py @@ -258,6 +258,21 @@ def create(self, request, *args, **kwargs): ) # Return the fresh new order with payment_info + print(">>>ID", serializer.data["id"]) + return Response( + serializers.OrderCreateResponseSerializer( + { + **serializer.data, + "payment_info__payment_id": payment_info["payment_id"], + "payment_info__provider": payment_info["provider"], + "payment_info__url": payment_info["url"], + # "payment_info__is_paid": payment_info["is_paid"] , + # "payment_info": payment_info, + # "payment_info": serializers.PaymentSerializer(**payment_info), + } + ).data, + status=201, + ) return Response( {**serializer.data, "payment_info": payment_info}, status=201, diff --git a/src/backend/joanie/core/serializers/order_create_body_serializer.py b/src/backend/joanie/core/serializers/order_create_body_serializer.py index ece51987e6..488e71e2f7 100644 --- a/src/backend/joanie/core/serializers/order_create_body_serializer.py +++ b/src/backend/joanie/core/serializers/order_create_body_serializer.py @@ -7,5 +7,6 @@ class OrderCreateBodySerializer(OrderSerializer): billing_address = AddressSerializer(required=False) class Meta(OrderSerializer.Meta): + fields = OrderSerializer.Meta.fields + ["billing_address"] read_only_fields = OrderSerializer.Meta.fields + ["billing_address"] diff --git a/src/backend/joanie/core/serializers/order_create_response_serializer.py b/src/backend/joanie/core/serializers/order_create_response_serializer.py index decccf8baf..a921ea655a 100644 --- a/src/backend/joanie/core/serializers/order_create_response_serializer.py +++ b/src/backend/joanie/core/serializers/order_create_response_serializer.py @@ -1,14 +1,70 @@ """Serializers for core.api.OrderViewSet.create Response""" from rest_framework import serializers +from djmoney.contrib.django_rest_framework import MoneyField -from .model_serializers import OrderSerializer, PaymentSerializer +from joanie.core import models +from .model_serializers import OrderSerializer, PaymentSerializer, EnrollmentSerializer class OrderCreateResponseSerializer(OrderSerializer): - id = serializers.CharField(required=True) payment_info = PaymentSerializer(required=False) + id = serializers.CharField(required=True) class Meta(OrderSerializer.Meta): fields = OrderSerializer.Meta.fields + ["payment_info"] read_only_fields = OrderSerializer.Meta.fields + ["payment_info"] + + # Copy / Past from OrderSerializer + # id = serializers.CharField(read_only=True) + # total = MoneyField( + # coerce_to_string=False, + # decimal_places=2, + # max_digits=9, + # min_value=0, + # read_only=True, + # ) + # enrollments = serializers.SerializerMethodField(read_only=True) + # organization = serializers.SlugRelatedField(read_only=True, slug_field="id") + # product = serializers.SlugRelatedField(read_only=True, slug_field="id") + # main_invoice = serializers.SlugRelatedField(read_only=True, slug_field="reference") + # certificate = serializers.SlugRelatedField(read_only=True, slug_field="id") + + # class Meta: + # model = models.Order + # fields = [ + # "payment_info", + # "id", + # "certificate", + # "created_on", + # "main_invoice", + # "organization", + # "total", + # "total_currency", + # "enrollments", + # "product", + # "state", + # ] + # read_only_fields = [ + # "payment_info", + # "id", + # "certificate", + # "created_on", + # "main_invoice", + # "organization", + # "total", + # "total_currency", + # "enrollments", + # "product", + # "state", + # ] + + # def get_enrollments(self, order): + # """ + # For the current order, retrieve its related enrollments. + # """ + # return EnrollmentSerializer( + # instance=order.get_enrollments(), + # many=True, + # context=self.context, + # ).data