ServiceStack Home (Live)

<back to all web services

QueryProducts

Admin
Requires Authentication
Required role:Admin
import Foundation
import ServiceStack

// @ValidateRequest(Validator="IsAdmin")
public class QueryProducts : QueryDb<Product>
{
    required public init(){ super.init() }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
    }
}

public class Product : Codable
{
    public var id:Int
    public var name:String
    public var createdDate:Date
    public var modifiedDate:Date
    public var skus:[Sku]
    public var active:Bool

    required public init(){}
}

public class Sku : Codable
{
    public var id:Int
    public var productId:Int
    public var type:SkuType
    public var feature:LicenseFeature
    public var code:String
    public var name:String
    public var notes:String
    // @Ignore()
    public var minQty:Int?

    public var maxQty:Int?
    public var price:Int
    public var plan:String
    public var discountOff:Int
    public var discountLabelOff:String
    public var actualPrice:Int
    public var isPlan:Bool
    public var isRenewal:Bool
    public var subscriptionDurationDays:Int?
    public var expiryDurationDays:Int?
    public var trialPeriodDays:Int?
    public var supportQty:Int
    public var coresQty:Int?
    public var createdDate:Date
    public var modifiedDate:Date
    public var licenseType:LicenseType
    public var active:Bool

    required public init(){}
}

public enum SkuType : String, Codable
{
    case Product
    case PerDev
    case PerCore
    case Site
    case Support
    case Training
    case Register
    case Payment
}

// @Flags()
public enum LicenseFeature : Int, Codable
{
    case None = 0
    case Free = 0
    case Premium = 1
    case Text = 2
    case Client = 4
    case Common = 8
    case Redis = 16
    case RedisSku = 18
    case OrmLite = 32
    case OrmLiteSku = 34
    case ServiceStack = 64
    case Server = 128
    case Razor = 256
    case Admin = 512
    case Aws = 1024
    case AwsSku = 1026
    case All = 2047
}

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

public class Customer : IAddress, Codable
{
    public var id:Int
    public var email:String
    public var displayName:String
    public var firstName:String
    public var lastName:String
    public var company:String
    public var phoneNumber:String
    public var addressLine1:String
    public var addressLine2:String
    public var addressCity:String
    public var addressZip:String
    public var addressState:String
    public var addressCountry:String
    public var stripeCustomerId:String
    public var stripeCouponId:String
    public var plan:String
    public var createdDate:Date
    public var isReferrer:Bool
    public var orders:[Order]
    public var subscriptions:[Subscription]

    required public init(){}
}

public class Order : IAddress, Codable
{
    public var id:Int
    public var customerId:Int
    public var productName:String
    public var firstName:String
    public var lastName:String
    public var email:String
    public var company:String
    public var phoneNumber:String
    public var addressLine1:String
    public var addressLine2:String
    public var addressCity:String
    public var addressZip:String
    public var addressState:String
    public var addressCountry:String
    public var agreeTerms:Bool
    public var notes:String
    public var last4:String
    public var subTotal:Int
    public var couponId:String
    public var discount:Int
    public var tax:Int
    public var total:Int
    public var itemQuantity:Int
    public var authorizedQuantity:Int?
    public var subscriptionId:Int?
    public var licenseRef:String
    public var paymentId:Int?
    public var emailId:Int?
    public var paid:Bool
    public var createdDate:Date
    public var modifiedDate:Date
    public var modifiedBy:String
    public var cancelledDate:Date?
    public var cancelledReason:String
    public var ipAddress:String
    public var orderDetails:[OrderDetail]

    required public init(){}
}

public class OrderDetail : Codable
{
    public var id:Int
    public var orderId:Int
    public var skuId:Int
    public var skuType:SkuType
    public var price:Int
    public var Description:String
    public var quantity:Int
    public var total:Int

    required public init(){}
}

public class Subscription : Codable
{
    public var id:Int
    public var customerId:Int
    public var email:String
    public var skuId:Int
    public var skuName:String
    public var skuType:SkuType
    public var code:String
    public var quantity:Int
    public var supportQuantity:Int
    public var total:Int
    public var isPlan:Bool
    public var isRenewal:Bool
    public var subscriptionDurationDays:Int
    public var renewalDate:Date?
    public var licenseRef:String
    public var licenseName:String
    public var licenseAddress:String
    public var licenseType:LicenseType
    public var expiryDate:Date
    public var licenseKey:LicenseKey
    public var licenseKeyText:String
    public var createdDate:Date
    public var modifiedDate:Date
    public var cancelledDate:Date?
    public var stripeSubscriptionId:String
    public var emailId:Int?
    public var emailRenewalId:Int?
    public var emailExpiredId:Int?
    public var renewalSubscriptionId:Int?
    public var externalRef:String
    public var notes:String
    public var error:String

    required public init(){}
}

public class LicenseKey : Codable
{
    public var ref:String
    public var name:String
    public var type:LicenseType
    public var meta:Int
    public var hash:String
    public var halg:String
    public var expiry:Date

    required public init(){}
}


Swift QueryProducts DTOs

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

HTTP + CSV

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

POST /csv/reply/QueryProducts HTTP/1.1 
Host: account.servicestack.net 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"skip":0,"take":0,"orderBy":"String","orderByDesc":"String","include":"String","fields":"String","meta":{"String":"String"}}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"offset":0,"total":0,"results":[{"id":0,"name":"String","createdDate":"\/Date(-62135596800000-0000)\/","modifiedDate":"\/Date(-62135596800000-0000)\/","skus":[{"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":"\/Date(-62135596800000-0000)\/","modifiedDate":"\/Date(-62135596800000-0000)\/","licenseType":"Free","active":false}],"active":false}],"meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}