from rest_framework import serializers from django.utils.translation import gettext_lazy as _ 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={}, )