From 3bf0eaeba2579e4b1e597e59ee2a144c2c370b1a Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 3 Jun 2025 21:35:41 +0300 Subject: [PATCH] Features: Add order's IDs to TransactionProcessSerializer. Extra: 1) Minor code improvements. --- core/permissions.py | 5 +---- core/serializers/__init__.py | 18 +++--------------- core/viewsets.py | 10 ++-------- payments/serializers.py | 10 +++++++++- vibes_auth/serializers.py | 5 +++-- vibes_auth/viewsets.py | 5 +---- 6 files changed, 19 insertions(+), 34 deletions(-) diff --git a/core/permissions.py b/core/permissions.py index c033af30..0dbd3645 100644 --- a/core/permissions.py +++ b/core/permissions.py @@ -68,10 +68,7 @@ class EvibesPermission(permissions.BasePermission): if request.user.has_perm(f"{app_label}.{codename}"): return True - return bool( - action in ("list", "retrieve") - and getattr(model, "is_publicly_visible", False) - ) + return bool(action in ("list", "retrieve") and getattr(model, "is_publicly_visible", False)) def has_object_permission(self, request, view, obj): if request.method in permissions.SAFE_METHODS: diff --git a/core/serializers/__init__.py b/core/serializers/__init__.py index 96f2fe80..ccce0500 100644 --- a/core/serializers/__init__.py +++ b/core/serializers/__init__.py @@ -158,24 +158,12 @@ class AddressCreateSerializer(ModelSerializer): # noqa: F405 write_only=True, max_length=512, ) - address_line_1 = CharField( - write_only=True, - max_length=128, - required=False - ) - address_line_2 = CharField( - write_only=True, - max_length=128, - required=False - ) + address_line_1 = CharField(write_only=True, max_length=128, required=False) + address_line_2 = CharField(write_only=True, max_length=128, required=False) class Meta: model = Address - fields = [ - "raw_data", - "address_line_1", - "address_line_2" - ] + fields = ["raw_data", "address_line_1", "address_line_2"] def create(self, validated_data): raw = validated_data.pop("raw_data") diff --git a/core/viewsets.py b/core/viewsets.py index 2ca3486b..fde2e24f 100644 --- a/core/viewsets.py +++ b/core/viewsets.py @@ -553,18 +553,12 @@ class AddressViewSet(EvibesViewSet): return AddressSerializer def create(self, request, **kwargs): - create_serializer = AddressCreateSerializer( - data=request.data, - context={"request": request} - ) + create_serializer = AddressCreateSerializer(data=request.data, context={"request": request}) create_serializer.is_valid(raise_exception=True) address_obj = create_serializer.create(create_serializer.validated_data) - output_serializer = AddressSerializer( - address_obj, - context={"request": request} - ) + output_serializer = AddressSerializer(address_obj, context={"request": request}) return Response( status=status.HTTP_201_CREATED, diff --git a/payments/serializers.py b/payments/serializers.py index 4bbad8f1..a9f16448 100644 --- a/payments/serializers.py +++ b/payments/serializers.py @@ -1,4 +1,4 @@ -from rest_framework.fields import FloatField, JSONField +from rest_framework.fields import FloatField, JSONField, SerializerMethodField from rest_framework.serializers import ModelSerializer, Serializer from payments.models import Transaction @@ -16,6 +16,14 @@ class TransactionSerializer(ModelSerializer): class TransactionProcessSerializer(ModelSerializer): process = JSONField(required=True) + order_hr_id = SerializerMethodField(read_only=True, required=False) + order_uuid = SerializerMethodField(read_only=True, required=False) + + def get_order_hr_id(self, obj: Transaction): + return obj.order.human_readable_id if obj.order else None + + def get_order_uuid(self, obj: Transaction): + return obj.order.uuid if obj.order else None class Meta: model = Transaction diff --git a/vibes_auth/serializers.py b/vibes_auth/serializers.py index 847b767e..7f60b2ea 100644 --- a/vibes_auth/serializers.py +++ b/vibes_auth/serializers.py @@ -94,8 +94,9 @@ class UserSerializer(ModelSerializer): Returns a list of serialized ProductSimpleSerializer representations for the UUIDs in obj.recently_viewed. """ - return ProductSimpleSerializer(Product.objects.filter(uuid__in=obj.recently_viewed, is_active=True), - many=True).data + return ProductSimpleSerializer( + Product.objects.filter(uuid__in=obj.recently_viewed, is_active=True), many=True + ).data class TokenObtainSerializer(Serializer): diff --git a/vibes_auth/viewsets.py b/vibes_auth/viewsets.py index 8c4fae3d..41194cbd 100644 --- a/vibes_auth/viewsets.py +++ b/vibes_auth/viewsets.py @@ -67,7 +67,6 @@ class UserViewSet( @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def confirm_password_reset(self, request, *args, **kwargs): try: - if not compare_digest(request.data.get("password"), request.data.get("confirm_password")): return Response( {"error": _("passwords do not match")}, @@ -151,6 +150,4 @@ class UserViewSet( instance = self.get_object() serializer = self.get_serializer(instance) instance = serializer.update(instance=self.get_object(), validated_data=request.data) - return Response( - self.get_serializer(instance.data) - ) + return Response(self.get_serializer(instance.data))