Tax Filing Service

<back to all web services

SearchProductsAsync

SearchProductsAsync

Represents a service to search for product data in an asynchronous operation.

Requires Authentication
Required role:AdminRequired permission:CanAccess
The following routes are available for this service:
GET/async/products/search
import Foundation
import ServiceStack

/**
* Represents a service to search for product data in an asynchronous operation.
*/
// @Api(Description="Represents a service to search for product data in an asynchronous operation.")
public class SearchProductsAsync : SearchProductsBase
{
    /**
    * The unique identifier of the account associated with the product.
    */
    // @ApiMember(Description="The unique identifier of the account associated with the product.")
    public var productId:Int?

    /**
    * The unique identifier of the account associated with the product.
    */
    // @ApiMember(Description="The unique identifier of the account associated with the product.")
    public var accountId:Int?

    /**
    * The name of the product.
    */
    // @ApiMember(Description="The name of the product.")
    public var name:String

    /**
    * Search by using the name of the product that starts with the specified value.
    */
    // @ApiMember(Description="Search by using the name of the product that starts with the specified value.")
    public var nameStartsWith:String

    /**
    * Search by using the name of the product that ends with the specified value.
    */
    // @ApiMember(Description="Search by using the name of the product that ends with the specified value.")
    public var nameEndsWith:String

    /**
    * Search by using the name of the product that contains the specified value.
    */
    // @ApiMember(Description="Search by using the name of the product that contains the specified value.")
    public var nameContains:String

    /**
    * The version of the product.
    */
    // @ApiMember(Description="The version of the product.")
    public var version:String

    /**
    * Search by using the version of the product that starts with the specified value.
    */
    // @ApiMember(Description="Search by using the version of the product that starts with the specified value.")
    public var versionStartsWith:String

    /**
    * Search by using the version of the product that ends with the specified value.
    */
    // @ApiMember(Description="Search by using the version of the product that ends with the specified value.")
    public var versionEndsWith:String

    /**
    * Search by using the version of the product that contains the specified value.
    */
    // @ApiMember(Description="Search by using the version of the product that contains the specified value.")
    public var versionContains:String

    /**
    * The description of the product.
    */
    // @ApiMember(Description="The description of the product.")
    public var Description:String

    /**
    * Search by using the description of the product that starts with the specified value.
    */
    // @ApiMember(Description="Search by using the description of the product that starts with the specified value.")
    public var descriptionStartsWith:String

    /**
    * Search by using the description of the product that ends with the specified value.
    */
    // @ApiMember(Description="Search by using the description of the product that ends with the specified value.")
    public var descriptionEndsWith:String

    /**
    * Search by using the description of the product that contains the specified value.
    */
    // @ApiMember(Description="Search by using the description of the product that contains the specified value.")
    public var descriptionContains:String

    /**
    * Should the related orders of the account be included in the retrieved products?
    */
    // @ApiMember(Description="Should the related orders of the account be included in the retrieved products?")
    public var includeOrders:Bool?

    /**
    * Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. 
    */
    // @ApiMember(Description="Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. ")
    public var skipOrders:Int?

    /**
    * Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. 
    */
    // @ApiMember(Description="Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. ")
    public var takeOrders:Int?

    /**
    * The number of query results to skip.
    */
    // @ApiMember(Description="The number of query results to skip.")
    public var skip:Int?

    /**
    * The number of query results to include.
    */
    // @ApiMember(Description="The number of query results to include.")
    public var take:Int?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case productId
        case accountId
        case name
        case nameStartsWith
        case nameEndsWith
        case nameContains
        case version
        case versionStartsWith
        case versionEndsWith
        case versionContains
        case Description
        case descriptionStartsWith
        case descriptionEndsWith
        case descriptionContains
        case includeOrders
        case skipOrders
        case takeOrders
        case skip
        case take
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        productId = try container.decodeIfPresent(Int.self, forKey: .productId)
        accountId = try container.decodeIfPresent(Int.self, forKey: .accountId)
        name = try container.decodeIfPresent(String.self, forKey: .name)
        nameStartsWith = try container.decodeIfPresent(String.self, forKey: .nameStartsWith)
        nameEndsWith = try container.decodeIfPresent(String.self, forKey: .nameEndsWith)
        nameContains = try container.decodeIfPresent(String.self, forKey: .nameContains)
        version = try container.decodeIfPresent(String.self, forKey: .version)
        versionStartsWith = try container.decodeIfPresent(String.self, forKey: .versionStartsWith)
        versionEndsWith = try container.decodeIfPresent(String.self, forKey: .versionEndsWith)
        versionContains = try container.decodeIfPresent(String.self, forKey: .versionContains)
        Description = try container.decodeIfPresent(String.self, forKey: .Description)
        descriptionStartsWith = try container.decodeIfPresent(String.self, forKey: .descriptionStartsWith)
        descriptionEndsWith = try container.decodeIfPresent(String.self, forKey: .descriptionEndsWith)
        descriptionContains = try container.decodeIfPresent(String.self, forKey: .descriptionContains)
        includeOrders = try container.decodeIfPresent(Bool.self, forKey: .includeOrders)
        skipOrders = try container.decodeIfPresent(Int.self, forKey: .skipOrders)
        takeOrders = try container.decodeIfPresent(Int.self, forKey: .takeOrders)
        skip = try container.decodeIfPresent(Int.self, forKey: .skip)
        take = try container.decodeIfPresent(Int.self, forKey: .take)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if productId != nil { try container.encode(productId, forKey: .productId) }
        if accountId != nil { try container.encode(accountId, forKey: .accountId) }
        if name != nil { try container.encode(name, forKey: .name) }
        if nameStartsWith != nil { try container.encode(nameStartsWith, forKey: .nameStartsWith) }
        if nameEndsWith != nil { try container.encode(nameEndsWith, forKey: .nameEndsWith) }
        if nameContains != nil { try container.encode(nameContains, forKey: .nameContains) }
        if version != nil { try container.encode(version, forKey: .version) }
        if versionStartsWith != nil { try container.encode(versionStartsWith, forKey: .versionStartsWith) }
        if versionEndsWith != nil { try container.encode(versionEndsWith, forKey: .versionEndsWith) }
        if versionContains != nil { try container.encode(versionContains, forKey: .versionContains) }
        if Description != nil { try container.encode(Description, forKey: .Description) }
        if descriptionStartsWith != nil { try container.encode(descriptionStartsWith, forKey: .descriptionStartsWith) }
        if descriptionEndsWith != nil { try container.encode(descriptionEndsWith, forKey: .descriptionEndsWith) }
        if descriptionContains != nil { try container.encode(descriptionContains, forKey: .descriptionContains) }
        if includeOrders != nil { try container.encode(includeOrders, forKey: .includeOrders) }
        if skipOrders != nil { try container.encode(skipOrders, forKey: .skipOrders) }
        if takeOrders != nil { try container.encode(takeOrders, forKey: .takeOrders) }
        if skip != nil { try container.encode(skip, forKey: .skip) }
        if take != nil { try container.encode(take, forKey: .take) }
    }
}

/**
* Specifies a service to search for products.
*/
// @Api(Description="Specifies a service to search for products.")
public class SearchProductsBase : PaginationBase, IGet
{
    /**
    * The unique identifier of the account associated with the product.
    */
    // @ApiMember(Description="The unique identifier of the account associated with the product.")
    public var productId:Int?

    /**
    * The unique identifier of the account associated with the product.
    */
    // @ApiMember(Description="The unique identifier of the account associated with the product.")
    public var accountId:Int?

    /**
    * The name of the product.
    */
    // @ApiMember(Description="The name of the product.")
    public var name:String

    /**
    * Search by using the name of the product that starts with the specified value.
    */
    // @ApiMember(Description="Search by using the name of the product that starts with the specified value.")
    public var nameStartsWith:String

    /**
    * Search by using the name of the product that ends with the specified value.
    */
    // @ApiMember(Description="Search by using the name of the product that ends with the specified value.")
    public var nameEndsWith:String

    /**
    * Search by using the name of the product that contains the specified value.
    */
    // @ApiMember(Description="Search by using the name of the product that contains the specified value.")
    public var nameContains:String

    /**
    * The version of the product.
    */
    // @ApiMember(Description="The version of the product.")
    public var version:String

    /**
    * Search by using the version of the product that starts with the specified value.
    */
    // @ApiMember(Description="Search by using the version of the product that starts with the specified value.")
    public var versionStartsWith:String

    /**
    * Search by using the version of the product that ends with the specified value.
    */
    // @ApiMember(Description="Search by using the version of the product that ends with the specified value.")
    public var versionEndsWith:String

    /**
    * Search by using the version of the product that contains the specified value.
    */
    // @ApiMember(Description="Search by using the version of the product that contains the specified value.")
    public var versionContains:String

    /**
    * The description of the product.
    */
    // @ApiMember(Description="The description of the product.")
    public var Description:String

    /**
    * Search by using the description of the product that starts with the specified value.
    */
    // @ApiMember(Description="Search by using the description of the product that starts with the specified value.")
    public var descriptionStartsWith:String

    /**
    * Search by using the description of the product that ends with the specified value.
    */
    // @ApiMember(Description="Search by using the description of the product that ends with the specified value.")
    public var descriptionEndsWith:String

    /**
    * Search by using the description of the product that contains the specified value.
    */
    // @ApiMember(Description="Search by using the description of the product that contains the specified value.")
    public var descriptionContains:String

    /**
    * Should the related orders of the account be included in the retrieved products?
    */
    // @ApiMember(Description="Should the related orders of the account be included in the retrieved products?")
    public var includeOrders:Bool?

    /**
    * Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. 
    */
    // @ApiMember(Description="Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. ")
    public var skipOrders:Int?

    /**
    * Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. 
    */
    // @ApiMember(Description="Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. ")
    public var takeOrders:Int?

    /**
    * The number of query results to skip.
    */
    // @ApiMember(Description="The number of query results to skip.")
    public var skip:Int?

    /**
    * The number of query results to include.
    */
    // @ApiMember(Description="The number of query results to include.")
    public var take:Int?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case productId
        case accountId
        case name
        case nameStartsWith
        case nameEndsWith
        case nameContains
        case version
        case versionStartsWith
        case versionEndsWith
        case versionContains
        case Description
        case descriptionStartsWith
        case descriptionEndsWith
        case descriptionContains
        case includeOrders
        case skipOrders
        case takeOrders
        case skip
        case take
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        productId = try container.decodeIfPresent(Int.self, forKey: .productId)
        accountId = try container.decodeIfPresent(Int.self, forKey: .accountId)
        name = try container.decodeIfPresent(String.self, forKey: .name)
        nameStartsWith = try container.decodeIfPresent(String.self, forKey: .nameStartsWith)
        nameEndsWith = try container.decodeIfPresent(String.self, forKey: .nameEndsWith)
        nameContains = try container.decodeIfPresent(String.self, forKey: .nameContains)
        version = try container.decodeIfPresent(String.self, forKey: .version)
        versionStartsWith = try container.decodeIfPresent(String.self, forKey: .versionStartsWith)
        versionEndsWith = try container.decodeIfPresent(String.self, forKey: .versionEndsWith)
        versionContains = try container.decodeIfPresent(String.self, forKey: .versionContains)
        Description = try container.decodeIfPresent(String.self, forKey: .Description)
        descriptionStartsWith = try container.decodeIfPresent(String.self, forKey: .descriptionStartsWith)
        descriptionEndsWith = try container.decodeIfPresent(String.self, forKey: .descriptionEndsWith)
        descriptionContains = try container.decodeIfPresent(String.self, forKey: .descriptionContains)
        includeOrders = try container.decodeIfPresent(Bool.self, forKey: .includeOrders)
        skipOrders = try container.decodeIfPresent(Int.self, forKey: .skipOrders)
        takeOrders = try container.decodeIfPresent(Int.self, forKey: .takeOrders)
        skip = try container.decodeIfPresent(Int.self, forKey: .skip)
        take = try container.decodeIfPresent(Int.self, forKey: .take)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if productId != nil { try container.encode(productId, forKey: .productId) }
        if accountId != nil { try container.encode(accountId, forKey: .accountId) }
        if name != nil { try container.encode(name, forKey: .name) }
        if nameStartsWith != nil { try container.encode(nameStartsWith, forKey: .nameStartsWith) }
        if nameEndsWith != nil { try container.encode(nameEndsWith, forKey: .nameEndsWith) }
        if nameContains != nil { try container.encode(nameContains, forKey: .nameContains) }
        if version != nil { try container.encode(version, forKey: .version) }
        if versionStartsWith != nil { try container.encode(versionStartsWith, forKey: .versionStartsWith) }
        if versionEndsWith != nil { try container.encode(versionEndsWith, forKey: .versionEndsWith) }
        if versionContains != nil { try container.encode(versionContains, forKey: .versionContains) }
        if Description != nil { try container.encode(Description, forKey: .Description) }
        if descriptionStartsWith != nil { try container.encode(descriptionStartsWith, forKey: .descriptionStartsWith) }
        if descriptionEndsWith != nil { try container.encode(descriptionEndsWith, forKey: .descriptionEndsWith) }
        if descriptionContains != nil { try container.encode(descriptionContains, forKey: .descriptionContains) }
        if includeOrders != nil { try container.encode(includeOrders, forKey: .includeOrders) }
        if skipOrders != nil { try container.encode(skipOrders, forKey: .skipOrders) }
        if takeOrders != nil { try container.encode(takeOrders, forKey: .takeOrders) }
        if skip != nil { try container.encode(skip, forKey: .skip) }
        if take != nil { try container.encode(take, forKey: .take) }
    }
}

/**
* The number of query results to skip.
*/
// @Api(Description="The number of query results to skip.")
public class PaginationBase : IPaginate, Codable
{
    /**
    * The number of query results to skip.
    */
    // @ApiMember(Description="The number of query results to skip.")
    public var skip:Int?

    /**
    * The number of query results to include.
    */
    // @ApiMember(Description="The number of query results to include.")
    public var take:Int?

    required public init(){}
}

/**
* Represents a query response that contains a structured error information and encapsulates products.
*/
// @Api(Description="Represents a query response that contains a structured error information and encapsulates products.")
public class ProductQueryResponse : QueryResponse<Product>
{
    /**
    * The dictionary of orders associated with each found product.
    */
    // @ApiMember(Description="The dictionary of orders associated with each found product.")
    public var ordersMap:[Int:[Order]] = [:]

    // @DataMember(Order=1)
    public var offset:Int

    // @DataMember(Order=2)
    public var total:Int

    // @DataMember(Order=3)
    public var results:[Product] = []

    // @DataMember(Order=4)
    public var meta:[String:String] = [:]

    // @DataMember(Order=5)
    public var responseStatus:ResponseStatus

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case ordersMap
        case offset
        case total
        case results
        case meta
        case responseStatus
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        ordersMap = try container.decodeIfPresent([Int:[Order]].self, forKey: .ordersMap) ?? [:]
        offset = try container.decodeIfPresent(Int.self, forKey: .offset)
        total = try container.decodeIfPresent(Int.self, forKey: .total)
        results = try container.decodeIfPresent([Product].self, forKey: .results) ?? []
        meta = try container.decodeIfPresent([String:String].self, forKey: .meta) ?? [:]
        responseStatus = try container.decodeIfPresent(ResponseStatus.self, forKey: .responseStatus)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if ordersMap.count > 0 { try container.encode(ordersMap, forKey: .ordersMap) }
        if offset != nil { try container.encode(offset, forKey: .offset) }
        if total != nil { try container.encode(total, forKey: .total) }
        if results.count > 0 { try container.encode(results, forKey: .results) }
        if meta.count > 0 { try container.encode(meta, forKey: .meta) }
        if responseStatus != nil { try container.encode(responseStatus, forKey: .responseStatus) }
    }
}

/**
* Represents a product.
*/
// @Api(Description="Represents a product.")
public class Product : IHasName, Codable
{
    /**
    * The unique identifier of the product.
    */
    // @ApiMember(Description="The unique identifier of the product.", IsRequired=true)
    public var id:Int

    /**
    * The position of this instance in a collection of 'Product' instances
    */
    // @ApiMember(Description="The position of this instance in a collection of 'Product' instances", IsRequired=true)
    public var index:Int

    /**
    * The name of the product.
    */
    // @ApiMember(Description="The name of the product.", IsRequired=true)
    // @Validate(Validator="NotEmpty")
    public var name:String

    /**
    * The version of the product.
    */
    // @ApiMember(Description="The version of the product.", IsRequired=true)
    // @Validate(Validator="NotEmpty")
    public var version:String

    /**
    * The version of the product.
    */
    // @ApiMember(Description="The version of the product.")
    public var Description:String

    /**
    * Tags associated with the product.
    */
    // @ApiMember(Description="Tags associated with the product.")
    public var tags:[String] = []

    required public init(){}
}


Swift SearchProductsAsync DTOs

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

HTTP + X-MSGPACK

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

GET /async/products/search HTTP/1.1 
Host: taxfiling.pwc.de 
Accept: application/x-msgpack
HTTP/1.1 200 OK
Content-Type: application/x-msgpack
Content-Length: length

{"ordersMap":{"0":[{"id":0,"productId":0,"accountId":0,"name":"String","serviceName":"String","requestTimestamp":"\/Date(-62135596800000-0000)\/","responseTimestamp":"\/Date(-62135596800000-0000)\/","requestUri":"String","requestHttpMethod":"String","requestDuration":"PT0S","responseStatusCode":"Continue","clientIPAddress":"String","unitOfMeasurement":"String","processType":"String","dataType":"String","dataName":"String","creationDate":"\/Date(-62135596800000-0000)\/","expiryDate":"\/Date(-62135596800000-0000)\/","isTest":false}]},"offset":0,"total":0,"results":[{"id":0,"index":0,"name":"String","version":"String","description":"String","tags":["String"]}],"meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}