from rest_framework import serializers class StrictSerializer(serializers.Serializer): def validate(self, attrs): unknown_fields = set(self.initial_data) - set(self.fields) if unknown_fields: raise serializers.ValidationError( {field: ["Unexpected field."] for field in sorted(unknown_fields)} ) return attrs class ReservationCreateSerializer(StrictSerializer): name = serializers.CharField(max_length=200, trim_whitespace=True) email = serializers.EmailField() phone = serializers.CharField(max_length=40, trim_whitespace=True, required=False, allow_blank=True) party_size = serializers.IntegerField(min_value=1) notes = serializers.CharField(trim_whitespace=True, required=False, allow_blank=True) class ReservationCreateResponseSerializer(serializers.Serializer): id = serializers.IntegerField() status = serializers.CharField() performance = serializers.IntegerField(source="performance_id") party_size = serializers.IntegerField() message = serializers.CharField() class ReservationConfirmSerializer(StrictSerializer): token = serializers.CharField(trim_whitespace=True, allow_blank=False) class ReservationQRResponseSerializer(serializers.Serializer): reservation_id = serializers.IntegerField(source="reservation.id") qr_code_url = serializers.CharField() qr_code_image = serializers.CharField() class ReservationConfirmResponseSerializer(serializers.Serializer): reservation_id = serializers.IntegerField(source="reservation.id") status = serializers.CharField(source="reservation.status") party_size = serializers.IntegerField(source="reservation.party_size") qr_code_url = serializers.CharField() qr_code_image = serializers.CharField()