osb catalog

This commit is contained in:
Tobias Brunner 2025-01-31 15:46:22 +01:00
parent 81e55a2134
commit ff4eb0a9ba
No known key found for this signature in database
2 changed files with 89 additions and 1 deletions

View file

@ -1,5 +1,6 @@
from rest_framework import serializers
from hub.services.models import ServiceOffering, Plan
from django.utils.html import strip_tags
class ServiceUserSerializer(serializers.Serializer):
@ -47,3 +48,70 @@ class ServiceInstanceProvisioningSerializer(serializers.Serializer):
return plan
except Plan.DoesNotExist:
raise serializers.ValidationError("Invalid plan_id")
class CostSerializer(serializers.Serializer):
amount = serializers.DecimalField(max_digits=10, decimal_places=2)
unit = serializers.CharField()
class PlanMetadataSerializer(serializers.Serializer):
bullets = serializers.ListField(child=serializers.CharField(), required=False)
costs = CostSerializer(many=True, required=False)
class PlanSerializer(serializers.ModelSerializer):
description = serializers.SerializerMethodField()
def get_description(self, obj):
return strip_tags(obj.description) if obj.description else ""
class Meta:
model = Plan
fields = ["id", "name", "description"]
class ServiceOfferingMetadataSerializer(serializers.Serializer):
displayName = serializers.CharField()
providerDisplayName = serializers.CharField()
longDescription = serializers.SerializerMethodField()
imageUrl = serializers.URLField(required=False)
def get_longDescription(self, obj):
return strip_tags(obj["longDescription"]) if obj.get("longDescription") else ""
class ServiceOfferingSerializer(serializers.ModelSerializer):
id = serializers.SerializerMethodField()
name = serializers.SerializerMethodField()
description = serializers.SerializerMethodField()
plans = PlanSerializer(many=True)
bindable = serializers.BooleanField(default=True)
metadata = serializers.SerializerMethodField()
class Meta:
model = ServiceOffering
fields = ["id", "name", "description", "plans", "bindable", "metadata"]
def get_id(self, obj):
return str(obj.pk)
def get_name(self, obj):
return f"{obj.service.name}-{obj.cloud_provider.name}".lower().replace(" ", "-")
def get_description(self, obj):
return strip_tags(obj.description) if obj.description else ""
def get_metadata(self, obj):
return ServiceOfferingMetadataSerializer(
{
"displayName": obj.service.name,
"providerDisplayName": obj.cloud_provider.name,
"longDescription": obj.description,
"imageUrl": obj.service.logo.url if obj.service.logo else None,
}
).data
class CatalogSerializer(serializers.Serializer):
services = ServiceOfferingSerializer(many=True)