from rest_framework import serializers from finance.models import Invoice, Payment, SubscriptionPlan class InvoiceSerializer(serializers.ModelSerializer): class Meta: model = Invoice fields = [ "id", "provider", "status", "currency", "amount_due", "amount_paid", "period_start", "period_end", "stripe_invoice_id", "stripe_checkout_session_id", "stripe_subscription_id", "hosted_invoice_url", "description", "created", "last_modified", ] read_only_fields = fields class PaymentSerializer(serializers.ModelSerializer): class Meta: model = Payment fields = [ "id", "invoice", "provider", "status", "currency", "amount", "stripe_payment_intent_id", "stripe_charge_id", "paid_at", "failure_message", "created", "last_modified", ] read_only_fields = fields class CheckoutSessionSerializer(serializers.Serializer): success_url = serializers.URLField(required=False, allow_blank=False) cancel_url = serializers.URLField(required=False, allow_blank=False) plan_slug = serializers.SlugField(required=False, allow_blank=False) class PortalSessionSerializer(serializers.Serializer): return_url = serializers.URLField(required=False, allow_blank=False) class SubscriptionPlanSerializer(serializers.ModelSerializer): features = serializers.SerializerMethodField() class Meta: model = SubscriptionPlan fields = [ "slug", "name", "description", "price_cents", "currency", "interval", "is_public", "is_selectable", "features", "prompt_quota_per_window", "prompt_window_hours", "monthly_token_quota", "sort_order", ] read_only_fields = fields def get_features(self, obj): return { "text_generation": obj.allows_feature("text_generation"), "image_generation": obj.allows_feature("image_generation"), "rag": obj.allows_feature("rag"), "all_future_features": obj.allows_all_future_features, }