Required role: | Admin | Required permission: | CanAccess |
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
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.staging.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"}}}