Features: Add order's IDs to TransactionProcessSerializer.

Extra: 1) Minor code improvements.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-06-03 21:35:41 +03:00
parent b71cc2355e
commit 3bf0eaeba2
6 changed files with 19 additions and 34 deletions

View file

@ -68,10 +68,7 @@ class EvibesPermission(permissions.BasePermission):
if request.user.has_perm(f"{app_label}.{codename}"): if request.user.has_perm(f"{app_label}.{codename}"):
return True return True
return bool( return bool(action in ("list", "retrieve") and getattr(model, "is_publicly_visible", False))
action in ("list", "retrieve")
and getattr(model, "is_publicly_visible", False)
)
def has_object_permission(self, request, view, obj): def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS: if request.method in permissions.SAFE_METHODS:

View file

@ -158,24 +158,12 @@ class AddressCreateSerializer(ModelSerializer): # noqa: F405
write_only=True, write_only=True,
max_length=512, max_length=512,
) )
address_line_1 = CharField( address_line_1 = CharField(write_only=True, max_length=128, required=False)
write_only=True, address_line_2 = CharField(write_only=True, max_length=128, required=False)
max_length=128,
required=False
)
address_line_2 = CharField(
write_only=True,
max_length=128,
required=False
)
class Meta: class Meta:
model = Address model = Address
fields = [ fields = ["raw_data", "address_line_1", "address_line_2"]
"raw_data",
"address_line_1",
"address_line_2"
]
def create(self, validated_data): def create(self, validated_data):
raw = validated_data.pop("raw_data") raw = validated_data.pop("raw_data")

View file

@ -553,18 +553,12 @@ class AddressViewSet(EvibesViewSet):
return AddressSerializer return AddressSerializer
def create(self, request, **kwargs): def create(self, request, **kwargs):
create_serializer = AddressCreateSerializer( create_serializer = AddressCreateSerializer(data=request.data, context={"request": request})
data=request.data,
context={"request": request}
)
create_serializer.is_valid(raise_exception=True) create_serializer.is_valid(raise_exception=True)
address_obj = create_serializer.create(create_serializer.validated_data) address_obj = create_serializer.create(create_serializer.validated_data)
output_serializer = AddressSerializer( output_serializer = AddressSerializer(address_obj, context={"request": request})
address_obj,
context={"request": request}
)
return Response( return Response(
status=status.HTTP_201_CREATED, status=status.HTTP_201_CREATED,

View file

@ -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 rest_framework.serializers import ModelSerializer, Serializer
from payments.models import Transaction from payments.models import Transaction
@ -16,6 +16,14 @@ class TransactionSerializer(ModelSerializer):
class TransactionProcessSerializer(ModelSerializer): class TransactionProcessSerializer(ModelSerializer):
process = JSONField(required=True) 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: class Meta:
model = Transaction model = Transaction

View file

@ -94,8 +94,9 @@ class UserSerializer(ModelSerializer):
Returns a list of serialized ProductSimpleSerializer representations Returns a list of serialized ProductSimpleSerializer representations
for the UUIDs in obj.recently_viewed. for the UUIDs in obj.recently_viewed.
""" """
return ProductSimpleSerializer(Product.objects.filter(uuid__in=obj.recently_viewed, is_active=True), return ProductSimpleSerializer(
many=True).data Product.objects.filter(uuid__in=obj.recently_viewed, is_active=True), many=True
).data
class TokenObtainSerializer(Serializer): class TokenObtainSerializer(Serializer):

View file

@ -67,7 +67,6 @@ class UserViewSet(
@method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h"))
def confirm_password_reset(self, request, *args, **kwargs): def confirm_password_reset(self, request, *args, **kwargs):
try: try:
if not compare_digest(request.data.get("password"), request.data.get("confirm_password")): if not compare_digest(request.data.get("password"), request.data.get("confirm_password")):
return Response( return Response(
{"error": _("passwords do not match")}, {"error": _("passwords do not match")},
@ -151,6 +150,4 @@ class UserViewSet(
instance = self.get_object() instance = self.get_object()
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
instance = serializer.update(instance=self.get_object(), validated_data=request.data) instance = serializer.update(instance=self.get_object(), validated_data=request.data)
return Response( return Response(self.get_serializer(instance.data))
self.get_serializer(instance.data)
)