ServiceStack Home (Live)

<back to all web services

Buy

The following routes are available for this service:
All Verbs/buy/{Id}
GET/Buy/{Id}
All Verbs/buy/{Id}/{Quantity}
GET/Buy
import 'package:servicestack/servicestack.dart';

enum SkuType
{
    Product,
    PerDev,
    PerCore,
    Site,
    Support,
    Training,
    Register,
    Payment,
}

// @flags()
class LicenseFeature
{
    static const LicenseFeature None = const LicenseFeature._(0);
    static const LicenseFeature Free = const LicenseFeature._(0);
    static const LicenseFeature Premium = const LicenseFeature._(1);
    static const LicenseFeature Text = const LicenseFeature._(2);
    static const LicenseFeature Client = const LicenseFeature._(4);
    static const LicenseFeature Common = const LicenseFeature._(8);
    static const LicenseFeature Redis = const LicenseFeature._(16);
    static const LicenseFeature RedisSku = const LicenseFeature._(18);
    static const LicenseFeature OrmLite = const LicenseFeature._(32);
    static const LicenseFeature OrmLiteSku = const LicenseFeature._(34);
    static const LicenseFeature ServiceStack = const LicenseFeature._(64);
    static const LicenseFeature Server = const LicenseFeature._(128);
    static const LicenseFeature Razor = const LicenseFeature._(256);
    static const LicenseFeature Admin = const LicenseFeature._(512);
    static const LicenseFeature Aws = const LicenseFeature._(1024);
    static const LicenseFeature AwsSku = const LicenseFeature._(1026);
    static const LicenseFeature All = const LicenseFeature._(2047);

    final int _value;
    const LicenseFeature._(this._value);
    int get value => _value;
    static List<LicenseFeature> get values => const [None,Free,Premium,Text,Client,Common,Redis,RedisSku,OrmLite,OrmLiteSku,ServiceStack,Server,Razor,Admin,Aws,AwsSku,All];
}

enum LicenseType
{
    Free,
    FreeIndividual,
    FreeOpenSource,
    Indie,
    Business,
    Enterprise,
    TextIndie,
    TextBusiness,
    OrmLiteIndie,
    OrmLiteBusiness,
    RedisIndie,
    RedisBusiness,
    AwsIndie,
    AwsBusiness,
    Trial,
    Site,
    TextSite,
    RedisSite,
    OrmLiteSite,
}

class Sku implements IConvertible
{
    int? id;
    int? productId;
    SkuType? type;
    LicenseFeature? feature;
    String? code;
    String? name;
    String? notes;
    // @ignore()
    int? minQty;

    int? maxQty;
    int? price;
    String? plan;
    int? discountOff;
    String? discountLabelOff;
    int? actualPrice;
    bool? isPlan;
    bool? isRenewal;
    int? subscriptionDurationDays;
    int? expiryDurationDays;
    int? trialPeriodDays;
    int? supportQty;
    int? coresQty;
    DateTime? createdDate;
    DateTime? modifiedDate;
    LicenseType? licenseType;
    bool? active;

    Sku({this.id,this.productId,this.type,this.feature,this.code,this.name,this.notes,this.minQty,this.maxQty,this.price,this.plan,this.discountOff,this.discountLabelOff,this.actualPrice,this.isPlan,this.isRenewal,this.subscriptionDurationDays,this.expiryDurationDays,this.trialPeriodDays,this.supportQty,this.coresQty,this.createdDate,this.modifiedDate,this.licenseType,this.active});
    Sku.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        id = json['id'];
        productId = json['productId'];
        type = JsonConverters.fromJson(json['type'],'SkuType',context!);
        feature = JsonConverters.fromJson(json['feature'],'LicenseFeature',context!);
        code = json['code'];
        name = json['name'];
        notes = json['notes'];
        minQty = json['minQty'];
        maxQty = json['maxQty'];
        price = json['price'];
        plan = json['plan'];
        discountOff = json['discountOff'];
        discountLabelOff = json['discountLabelOff'];
        actualPrice = json['actualPrice'];
        isPlan = json['isPlan'];
        isRenewal = json['isRenewal'];
        subscriptionDurationDays = json['subscriptionDurationDays'];
        expiryDurationDays = json['expiryDurationDays'];
        trialPeriodDays = json['trialPeriodDays'];
        supportQty = json['supportQty'];
        coresQty = json['coresQty'];
        createdDate = JsonConverters.fromJson(json['createdDate'],'DateTime',context!);
        modifiedDate = JsonConverters.fromJson(json['modifiedDate'],'DateTime',context!);
        licenseType = JsonConverters.fromJson(json['licenseType'],'LicenseType',context!);
        active = json['active'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'id': id,
        'productId': productId,
        'type': JsonConverters.toJson(type,'SkuType',context!),
        'feature': JsonConverters.toJson(feature,'LicenseFeature',context!),
        'code': code,
        'name': name,
        'notes': notes,
        'minQty': minQty,
        'maxQty': maxQty,
        'price': price,
        'plan': plan,
        'discountOff': discountOff,
        'discountLabelOff': discountLabelOff,
        'actualPrice': actualPrice,
        'isPlan': isPlan,
        'isRenewal': isRenewal,
        'subscriptionDurationDays': subscriptionDurationDays,
        'expiryDurationDays': expiryDurationDays,
        'trialPeriodDays': trialPeriodDays,
        'supportQty': supportQty,
        'coresQty': coresQty,
        'createdDate': JsonConverters.toJson(createdDate,'DateTime',context!),
        'modifiedDate': JsonConverters.toJson(modifiedDate,'DateTime',context!),
        'licenseType': JsonConverters.toJson(licenseType,'LicenseType',context!),
        'active': active
    };

    getTypeName() => "Sku";
    TypeContext? context = _ctx;
}

class QuoteResponse implements IConvertible
{
    int? skuId;
    String? code;
    int? customerId;
    bool? modifyingExistingSubscription;
    bool? changingSubscriptions;
    bool? switchingLicensingModels;
    bool? replacesExistingQuantity;
    int? existingSubscriptionQuantity;
    int? newSubscriptionQuantity;
    String? unusedAmount;
    bool? manualProrating;
    int? unusedDays;
    int? quantity;
    int? minQuantity;
    int? maxQuantity;
    String? subtotal;
    String? discountDescription;
    String? discountReceived;
    String? discount;
    String? total;
    String? expiryDate;
    String? renewalDate;
    bool? isReferrer;
    ResponseStatus? responseStatus;

    QuoteResponse({this.skuId,this.code,this.customerId,this.modifyingExistingSubscription,this.changingSubscriptions,this.switchingLicensingModels,this.replacesExistingQuantity,this.existingSubscriptionQuantity,this.newSubscriptionQuantity,this.unusedAmount,this.manualProrating,this.unusedDays,this.quantity,this.minQuantity,this.maxQuantity,this.subtotal,this.discountDescription,this.discountReceived,this.discount,this.total,this.expiryDate,this.renewalDate,this.isReferrer,this.responseStatus});
    QuoteResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        skuId = json['skuId'];
        code = json['code'];
        customerId = json['customerId'];
        modifyingExistingSubscription = json['modifyingExistingSubscription'];
        changingSubscriptions = json['changingSubscriptions'];
        switchingLicensingModels = json['switchingLicensingModels'];
        replacesExistingQuantity = json['replacesExistingQuantity'];
        existingSubscriptionQuantity = json['existingSubscriptionQuantity'];
        newSubscriptionQuantity = json['newSubscriptionQuantity'];
        unusedAmount = json['unusedAmount'];
        manualProrating = json['manualProrating'];
        unusedDays = json['unusedDays'];
        quantity = json['quantity'];
        minQuantity = json['minQuantity'];
        maxQuantity = json['maxQuantity'];
        subtotal = json['subtotal'];
        discountDescription = json['discountDescription'];
        discountReceived = json['discountReceived'];
        discount = json['discount'];
        total = json['total'];
        expiryDate = json['expiryDate'];
        renewalDate = json['renewalDate'];
        isReferrer = json['isReferrer'];
        responseStatus = JsonConverters.fromJson(json['responseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'skuId': skuId,
        'code': code,
        'customerId': customerId,
        'modifyingExistingSubscription': modifyingExistingSubscription,
        'changingSubscriptions': changingSubscriptions,
        'switchingLicensingModels': switchingLicensingModels,
        'replacesExistingQuantity': replacesExistingQuantity,
        'existingSubscriptionQuantity': existingSubscriptionQuantity,
        'newSubscriptionQuantity': newSubscriptionQuantity,
        'unusedAmount': unusedAmount,
        'manualProrating': manualProrating,
        'unusedDays': unusedDays,
        'quantity': quantity,
        'minQuantity': minQuantity,
        'maxQuantity': maxQuantity,
        'subtotal': subtotal,
        'discountDescription': discountDescription,
        'discountReceived': discountReceived,
        'discount': discount,
        'total': total,
        'expiryDate': expiryDate,
        'renewalDate': renewalDate,
        'isReferrer': isReferrer,
        'responseStatus': JsonConverters.toJson(responseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "QuoteResponse";
    TypeContext? context = _ctx;
}

class BuyResponse implements IConvertible
{
    String? coupon;
    String? renewalRef;
    String? upgradeRef;
    Sku? sku;
    QuoteResponse? quote;
    ResponseStatus? responseStatus;

    BuyResponse({this.coupon,this.renewalRef,this.upgradeRef,this.sku,this.quote,this.responseStatus});
    BuyResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        coupon = json['coupon'];
        renewalRef = json['renewalRef'];
        upgradeRef = json['upgradeRef'];
        sku = JsonConverters.fromJson(json['sku'],'Sku',context!);
        quote = JsonConverters.fromJson(json['quote'],'QuoteResponse',context!);
        responseStatus = JsonConverters.fromJson(json['responseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'coupon': coupon,
        'renewalRef': renewalRef,
        'upgradeRef': upgradeRef,
        'sku': JsonConverters.toJson(sku,'Sku',context!),
        'quote': JsonConverters.toJson(quote,'QuoteResponse',context!),
        'responseStatus': JsonConverters.toJson(responseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "BuyResponse";
    TypeContext? context = _ctx;
}

class Buy implements IGet, IConvertible
{
    String? id;
    String? coupon;
    int? quantity;
    String? renewalRef;
    String? upgradeRef;

    Buy({this.id,this.coupon,this.quantity,this.renewalRef,this.upgradeRef});
    Buy.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        id = json['id'];
        coupon = json['coupon'];
        quantity = json['quantity'];
        renewalRef = json['renewalRef'];
        upgradeRef = json['upgradeRef'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'id': id,
        'coupon': coupon,
        'quantity': quantity,
        'renewalRef': renewalRef,
        'upgradeRef': upgradeRef
    };

    getTypeName() => "Buy";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'account.servicestack.net', types: <String, TypeInfo> {
    'SkuType': TypeInfo(TypeOf.Enum, enumValues:SkuType.values),
    'LicenseFeature': TypeInfo(TypeOf.Enum, enumValues:LicenseFeature.values),
    'LicenseType': TypeInfo(TypeOf.Enum, enumValues:LicenseType.values),
    'Sku': TypeInfo(TypeOf.Class, create:() => Sku()),
    'QuoteResponse': TypeInfo(TypeOf.Class, create:() => QuoteResponse()),
    'BuyResponse': TypeInfo(TypeOf.Class, create:() => BuyResponse()),
    'Buy': TypeInfo(TypeOf.Class, create:() => Buy()),
});

Dart Buy DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /buy/{Id} HTTP/1.1 
Host: account.servicestack.net 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	id: String,
	coupon: String,
	quantity: 0,
	renewalRef: String,
	upgradeRef: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	coupon: String,
	renewalRef: String,
	upgradeRef: String,
	sku: 
	{
		id: 0,
		productId: 0,
		type: Product,
		feature: 0,
		code: String,
		name: String,
		notes: String,
		maxQty: 0,
		price: 0,
		plan: String,
		discountOff: 0,
		discountLabelOff: String,
		actualPrice: 0,
		isPlan: False,
		isRenewal: False,
		subscriptionDurationDays: 0,
		expiryDurationDays: 0,
		trialPeriodDays: 0,
		supportQty: 0,
		coresQty: 0,
		createdDate: 0001-01-01,
		modifiedDate: 0001-01-01,
		licenseType: Free,
		active: False
	},
	quote: 
	{
		skuId: 0,
		code: String,
		customerId: 0,
		modifyingExistingSubscription: False,
		changingSubscriptions: False,
		switchingLicensingModels: False,
		replacesExistingQuantity: False,
		existingSubscriptionQuantity: 0,
		newSubscriptionQuantity: 0,
		unusedAmount: String,
		manualProrating: False,
		unusedDays: 0,
		quantity: 0,
		minQuantity: 0,
		maxQuantity: 0,
		subtotal: String,
		discountDescription: String,
		discountReceived: String,
		discount: String,
		total: String,
		expiryDate: String,
		renewalDate: String,
		isReferrer: False,
		responseStatus: 
		{
			errorCode: String,
			message: String,
			stackTrace: String,
			errors: 
			[
				{
					errorCode: String,
					fieldName: String,
					message: String,
					meta: 
					{
						String: String
					}
				}
			],
			meta: 
			{
				String: String
			}
		}
	},
	responseStatus: 
	{
		errorCode: String,
		message: String,
		stackTrace: String,
		errors: 
		[
			{
				errorCode: String,
				fieldName: String,
				message: String,
				meta: 
				{
					String: String
				}
			}
		],
		meta: 
		{
			String: String
		}
	}
}