49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
from rest_framework import serializers
|
|
|
|
from apps.bookings.models import Booking
|
|
from apps.payments.models import Payment, PaymentProvider, PaymentStatus
|
|
|
|
|
|
class PaymentSerializer(serializers.ModelSerializer):
|
|
booking_id = serializers.IntegerField(source="booking.id", read_only=True)
|
|
|
|
class Meta:
|
|
model = Payment
|
|
fields = [
|
|
"id",
|
|
"booking_id",
|
|
"provider",
|
|
"status",
|
|
"amount",
|
|
"currency",
|
|
"external_id",
|
|
"metadata",
|
|
"created_at",
|
|
]
|
|
read_only_fields = fields
|
|
|
|
|
|
class PaymentCreateSerializer(serializers.ModelSerializer):
|
|
booking_id = serializers.IntegerField(write_only=True)
|
|
provider = serializers.ChoiceField(choices=PaymentProvider.choices)
|
|
|
|
class Meta:
|
|
model = Payment
|
|
fields = ["booking_id", "provider"]
|
|
|
|
def validate_booking_id(self, value):
|
|
if not Booking.objects.filter(id=value).exists():
|
|
raise serializers.ValidationError("Booking not found")
|
|
return value
|
|
|
|
def create(self, validated_data):
|
|
booking = Booking.objects.get(id=validated_data["booking_id"])
|
|
return Payment.objects.create(
|
|
booking=booking,
|
|
provider=validated_data["provider"],
|
|
status=PaymentStatus.CREATED,
|
|
amount=booking.price_amount,
|
|
currency=booking.currency,
|
|
metadata={},
|
|
)
|