from rest_framework import serializers from hub.services.models import ServiceOffering, Plan class ServiceUserSerializer(serializers.Serializer): email = serializers.EmailField() full_name = serializers.CharField() role = serializers.CharField() class ProvisioningContextSerializer(serializers.Serializer): platform = serializers.CharField() organization_guid = serializers.CharField() space_guid = serializers.CharField() organization_name = serializers.CharField() organization_display_name = serializers.CharField() class ProvisioningParametersSerializer(serializers.Serializer): users = ServiceUserSerializer(many=True) class ServiceInstanceProvisioningSerializer(serializers.Serializer): service_id = serializers.CharField() # This will now represent the offering_id plan_id = serializers.CharField() organization_guid = serializers.CharField() space_guid = serializers.CharField() parameters = ProvisioningParametersSerializer() context = ProvisioningContextSerializer() def validate_service_id(self, value): """Validate the service_id which now represents the offering_id""" try: return ServiceOffering.objects.get(pk=value) except ServiceOffering.DoesNotExist: raise serializers.ValidationError("Invalid offering_id") def validate_plan_id(self, value): try: # Get the plan and ensure it belongs to the selected offering plan = Plan.objects.get(pk=value) offering = self.initial_data.get("service_id") if str(plan.offering.id) != offering: raise serializers.ValidationError( "Plan does not belong to the selected offering" ) return plan except Plan.DoesNotExist: raise serializers.ValidationError("Invalid plan_id")