/* Options: Date: 2026-05-19 10:56:07 SwiftVersion: 5.0 Version: 8.22 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://dev-api-booster.richemont.com //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: GetCustomerPaginated.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/customer/{brand}/slim", "GET") public class GetCustomerPaginated : SearchCustomer, IReturn, IPagedRequest { public typealias Return = GetCustomerPaginatedResponse /** * Index of the result set returned */ // @ApiMember(Description="Index of the result set returned") public var page:Int /** * Size of the result set returned */ // @ApiMember(Description="Size of the result set returned") public var items:Int /** * Omit precise record count - save on performance */ // @ApiMember(Description="Omit precise record count - save on performance") public var noCount:Bool /** * Values can be 'NameDESC', 'NameASC', 'RegASC', 'RegDESC' */ // @ApiMember(Description="Values can be 'NameDESC', 'NameASC', 'RegASC', 'RegDESC'") public var sortBy:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case page case items case noCount case sortBy } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) page = try container.decodeIfPresent(Int.self, forKey: .page) items = try container.decodeIfPresent(Int.self, forKey: .items) noCount = try container.decodeIfPresent(Bool.self, forKey: .noCount) sortBy = try container.decodeIfPresent(String.self, forKey: .sortBy) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if page != nil { try container.encode(page, forKey: .page) } if items != nil { try container.encode(items, forKey: .items) } if noCount != nil { try container.encode(noCount, forKey: .noCount) } if sortBy != nil { try container.encode(sortBy, forKey: .sortBy) } } } public class GetCustomerPaginatedResponse : Codable { /** * Total Pages */ // @ApiMember(Description="Total Pages", IsRequired=true) public var totalPages:Int /** * Total Results */ // @ApiMember(Description="Total Results", IsRequired=true) public var totalResults:Int /** * Index of the result set returned */ // @ApiMember(Description="Index of the result set returned", IsRequired=true) public var page:Int /** * Size of the result set returned */ // @ApiMember(Description="Size of the result set returned", IsRequired=true) public var items:Int /** * List of customers */ // @ApiMember(Description="List of customers", IsRequired=true) public var elements:[GetCustomerPaginatedElement] = [] required public init(){} } public class GetCustomerInterest : Codable { /** * Interest description */ // @ApiMember(Description="Interest description", IsRequired=true) public var interest:String /** * SAP Interest ID, e.g. 'CA-1' */ // @ApiMember(Description="SAP Interest ID, e.g. 'CA-1'", IsRequired=true) public var sapInterestId:String required public init(){} } public class GetCustomerHobby : Codable { /** * Hobby description */ // @ApiMember(Description="Hobby description") public var hobby:String /** * SAP Hobby ID, e.g. 'ART' */ // @ApiMember(Description="SAP Hobby ID, e.g. 'ART'") public var sapHobbyId:String required public init(){} } public class GetCustomerProductCollection : Codable { /** * Product Collection description */ // @ApiMember(Description="Product Collection description", IsRequired=true) public var productCollection:String /** * SAP ProductCollection ID, e.g. 'CA-1' */ // @ApiMember(Description="SAP ProductCollection ID, e.g. 'CA-1'", IsRequired=true) public var sapProductCollectionId:String required public init(){} } public class ProductCategory : Codable { /** * Brand Category ID */ // @ApiMember(Description="Brand Category ID") public var brandCategoryId:String /** * Grand Category ID */ // @ApiMember(Description="Grand Category ID", IsRequired=true) public var grandCategoryId:String /** * Master Category ID */ // @ApiMember(Description="Master Category ID") public var masterCategoryId:String /** * Category ID */ // @ApiMember(Description="Category ID") public var categoryId:String /** * Sub Category ID */ // @ApiMember(Description="Sub Category ID") public var subCategoryId:String required public init(){} } public class SearchCustomer : Codable { /** * Brand */ // @ApiMember(Description="Brand", IsRequired=true) public var brand:String /** * POS Legacy */ // @ApiMember(Description="POS Legacy", IsRequired=true) public var posCodes:[String] = [] /** * Search key could be: 'Name', 'Email', 'Phone' without prefix, 'BoosterCustomerId' OR 'SapCRMId' */ // @ApiMember(Description="Search key could be: 'Name', 'Email', 'Phone' without prefix, 'BoosterCustomerId' OR 'SapCRMId'") public var searchKey:String /** * Search by phone number - exact match */ // @ApiMember(Description="Search by phone number - exact match") public var phoneNumber:String /** * Search by email address - exact match */ // @ApiMember(Description="Search by email address - exact match") public var email:String /** * Values can be 'it', 'en' etc. */ // @ApiMember(Description="Values can be 'it', 'en' etc.") public var locationCountryIds:[String] = [] /** * Client Spending From e.g. '100' */ // @ApiMember(Description="Client Spending From e.g. '100'") public var clientSpendingFrom:Double? /** * Client Spending To e.g. '50000' */ // @ApiMember(Description="Client Spending To e.g. '50000'") public var clientSpendingTo:Double? /** * Customer Creation Date From e.g. '2022-01-01' */ // @ApiMember(Description="Customer Creation Date From e.g. '2022-01-01'") public var creationDateFrom:Date? /** * Customer Creation Date To e.g. '2023-11-01' */ // @ApiMember(Description="Customer Creation Date To e.g. '2023-11-01'") public var creationDateTo:Date? /** * Transaction Date From e.g. '2022-01-01' */ // @ApiMember(Description="Transaction Date From e.g. '2022-01-01'") public var transactionDateFrom:Date? /** * Transaction Date To e.g. '2023-11-01' */ // @ApiMember(Description="Transaction Date To e.g. '2023-11-01'") public var transactionDateTo:Date? /** * Values can be 'true' or 'false' */ // @ApiMember(Description="Values can be 'true' or 'false'") public var canBeContactedByMaison:Bool? /** * Values can be 1 for 'January', 2 for 'February', 3 for 'March', 4 for 'April', 5 for 'May', 6 for 'June', 7 for 'July', 8 for 'August', 9 for 'September', 10 for 'October', 11 for 'November', 12 for 'December' */ // @ApiMember(Description="Values can be 1 for 'January', 2 for 'February', 3 for 'March', 4 for 'April', 5 for 'May', 6 for 'June', 7 for 'July', 8 for 'August', 9 for 'September', 10 for 'October', 11 for 'November', 12 for 'December'") public var birthdateMonths:[Int] = [] /** * Customer interest filter */ // @ApiMember(Description="Customer interest filter") public var interests:[GetCustomerInterest] = [] /** * Customer hobby filter */ // @ApiMember(Description="Customer hobby filter") public var hobbies:[GetCustomerHobby] = [] /** * Customer product collection filter */ // @ApiMember(Description="Customer product collection filter") public var productCollections:[GetCustomerProductCollection] = [] /** * Customer Status e.g. 'Prospect', 'Client' */ // @ApiMember(Description="Customer Status e.g. 'Prospect', 'Client'") public var customerStatus:[String] = [] /** * List of BoosterCustomerIds, e.g. 1234567,1231231,12323423 */ // @ApiMember(Description="List of BoosterCustomerIds, e.g. 1234567,1231231,12323423") public var boosterCustomerIds:[Int] = [] /** * Values can be 'true' or 'false' */ // @ApiMember(Description="Values can be 'true' or 'false'") public var hasSapCrmError:Bool? /** * Product Categories */ // @ApiMember(Description="Product Categories") public var productCategories:[ProductCategory] = [] /** * Sale Reprentative Emails */ // @ApiMember(Description="Sale Reprentative Emails") public var saleRepresentativeEmails:[String] = [] required public init(){} } public protocol IPagedRequest { var page:Int { get set } var items:Int { get set } var noCount:Bool { get set } var sortBy:String { get set } } public class ProductCategory : Codable { /** * Brand Category ID */ // @ApiMember(Description="Brand Category ID") public var brandCategoryId:String /** * Grand Category ID */ // @ApiMember(Description="Grand Category ID") public var grandCategoryId:String /** * Master Category ID */ // @ApiMember(Description="Master Category ID") public var masterCategoryId:String /** * Category ID */ // @ApiMember(Description="Category ID") public var categoryId:String /** * Sub Category ID */ // @ApiMember(Description="Sub Category ID") public var subCategoryId:String required public init(){} } public class GetCustomerPaginatedElement : Codable { /** * Booster Customer Id */ // @ApiMember(Description="Booster Customer Id", IsRequired=true) public var boosterCustomerId:Int /** * First name */ // @ApiMember(Description="First name", IsRequired=true) public var firstName:String /** * Middle name */ // @ApiMember(Description="Middle name", IsRequired=true) public var middleName:String /** * Last name */ // @ApiMember(Description="Last name", IsRequired=true) public var lastName:String /** * First name Not Latin */ // @ApiMember(Description="First name Not Latin", IsRequired=true) public var firstNameNotLatin:String /** * Last name Not Latin */ // @ApiMember(Description="Last name Not Latin", IsRequired=true) public var lastNameNotLatin:String /** * Customer phone */ // @ApiMember(Description="Customer phone", IsRequired=true) public var phone:String /** * Phone Country Prefix */ // @ApiMember(Description="Phone Country Prefix", IsRequired=true) public var countryPrefix:String /** * Customer email */ // @ApiMember(Description="Customer email", IsRequired=true) public var email:String /** * Data Sharing Consent */ // @ApiMember(Description="Data Sharing Consent", IsRequired=true) public var dataSharingConsent:Bool? /** * Sellout Transaction Count */ // @ApiMember(Description="Sellout Transaction Count", IsRequired=true) public var selloutTransactionCount:Int /** * Elevate Customer ID */ // @ApiMember(Description="Elevate Customer ID") public var elevateCustomerId:String /** * Elevate Consent Status */ // @ApiMember(Description="Elevate Consent Status") public var elevateConsentStatus:String /** * Customer Country Id */ // @ApiMember(Description="Customer Country Id") public var countryId:String /** * Registration date */ // @ApiMember(Description="Registration date") public var registrationDate:Date? /** * Sap Crm Error Message */ // @ApiMember(Description="Sap Crm Error Message") public var sapCrmErrorMessage:String required public init(){} }