کارتِ اشتراک زیرِ هر پلن فهرستِ امکانات و یک برچسب («محبوبترین»، «بهترین ارزش») نشان میدهد، و هر دو در کدِ فرانت هاردکد بودند — یعنی عوض کردنِ یک بندِ متنی به دیپلویِ تازهی اپ نیاز داشت. Plan حالا features و badge دارد. `popular` سرِ جایش ماند: بولین است و متنِ برچسب را نمیدهد، پس این جایگزینش نیست، کنارش است. هیچکدام اجباری نیستند و پلنهای موجود بدونشان همچنان سرو میشوند. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
from rest_framework import serializers
|
|
|
|
|
|
class PlanSerializer(serializers.Serializer):
|
|
id = serializers.CharField()
|
|
title = serializers.CharField()
|
|
price = serializers.IntegerField()
|
|
currency = serializers.CharField(required=False)
|
|
popular = serializers.BooleanField()
|
|
discountPercent = serializers.IntegerField(required=False)
|
|
durationDays = serializers.IntegerField(required=False)
|
|
features = serializers.ListField(child=serializers.CharField())
|
|
badge = serializers.CharField(allow_blank=True)
|
|
|
|
|
|
class PlansListResponseSerializer(serializers.Serializer):
|
|
plans = PlanSerializer(many=True)
|
|
|
|
|
|
class PurchaseRequestSerializer(serializers.Serializer):
|
|
# هدر Idempotency-Key هم روی همین درخواست لازمه (بخش ۴.۳ سند API)؛
|
|
# از request.headers خونده میشه، نه از بدنه.
|
|
planId = serializers.CharField()
|
|
paymentMethod = serializers.CharField(required=False, default='zarinpal')
|
|
|
|
|
|
class PurchaseResponseSerializer(serializers.Serializer):
|
|
orderId = serializers.CharField()
|
|
paymentUrl = serializers.CharField()
|
|
|
|
|
|
class SubscriptionStatusResponseSerializer(serializers.Serializer):
|
|
active = serializers.BooleanField()
|
|
planId = serializers.CharField(allow_null=True)
|
|
expiresAt = serializers.DateTimeField(allow_null=True)
|