/* Options: Date: 2024-06-17 02:16:16 SwiftVersion: 5.0 Version: 8.23 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://testapi.bokamera.se //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: UpdateCustomer.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/customers/{Id}", "PUT") // @ApiResponse(Description="Returned if there is a validation error on the input parameters", StatusCode=400) // @ApiResponse(Description="Returned if the current user is not allowed to perform the action", StatusCode=401) // @ValidateRequest(Validator="IsAuthenticated") public class UpdateCustomer : IReturn, Codable { public typealias Return = CustomerQueryResponse /** * Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used. */ // @ApiMember(Description="Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.", ParameterType="query") public var companyId:String? /** * customer id */ // @ApiMember(Description="customer id", IsRequired=true, ParameterType="path") public var id:String public var firstname:String public var lastname:String public var phone:String public var email:String /** * If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated */ // @ApiMember(Description="If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated") public var customFields:[AddCustomField] = [] /** * List of Access Keys */ // @ApiMember(Description="List of Access Keys") public var accessKeys:[AddUserAccessKey] = [] public var accessKeysToDelete:[DeleteUserAccessKey] = [] public var subscribedToNewsletter:Bool? public var invoiceAddress:InvoiceAddress required public init(){} } public class CustomerQueryResponse : Codable { public var id:String public var firstname:String public var lastname:String public var email:String public var phone:String public var imageUrl:String public var customFields:[CustomFieldConfigData] = [] public var customFieldValues:[CustomFieldDataResponse] = [] public var comments:[CustomerCommentsResponse] = [] public var accessKeys:[UserAccessKeys] = [] public var updated:Date public var created:Date //responseStatus:Object ignored. Type could not be extended in Swift public var subscribedToNewsletter:Bool public var invoiceAddress:InvoiceAddress required public init(){} } public class AddCustomField : Codable { public var id:Int public var value:String required public init(){} } public class AddUserAccessKey : Codable { public var id:String? public var companyId:String? public var accessKeyTypeId:Int public var value:String public var customerId:String? public var Description:String required public init(){} } public class DeleteUserAccessKey : Codable { public var id:String required public init(){} } public class InvoiceAddress : Codable { public var corporateIdentityNumber:String public var invoiceAddress1:String public var invoiceAddress2:String public var invoiceCity:String public var invoicePostalCode:String public var invoiceCountryCode:String required public init(){} } public class CustomFieldConfigData : Codable { /** * Custom field id */ // @ApiMember(Description="Custom field id") public var id:Int /** * Configuration name. Example: 'Number of persons'. */ // @ApiMember(Description="Configuration name. Example: 'Number of persons'.") public var name:String /** * Custom field description. Example: 'For how many persons is this booking?' */ // @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'") public var Description:String /** * Field width. Example: 20 for 20px */ // @ApiMember(Description="Field width. Example: 20 for 20px") public var width:Int? /** * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox' */ // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'") public var dataType:String /** * Default value of the field. Example: '3' */ // @ApiMember(Description="Default value of the field. Example: '3'") public var defaultValue:String /** * Determines if the field is required to have a value or not */ // @ApiMember(Description="Determines if the field is required to have a value or not") public var isMandatory:Bool /** * Error message shown to the user if the field data is required but not entered */ // @ApiMember(Description="Error message shown to the user if the field data is required but not entered") public var mandatoryErrorMessage:String /** * Max lenght of the field */ // @ApiMember(Description="Max lenght of the field") public var maxLength:Int /** * If the field should have multiple lines */ // @ApiMember(Description="If the field should have multiple lines") public var multipleLineText:Bool /** * Regular expression used for validation of the field */ // @ApiMember(Description="Regular expression used for validation of the field") public var regEx:String /** * Error message shown if the regular expression validation failed */ // @ApiMember(Description="Error message shown if the regular expression validation failed") public var regExErrorMessage:String /** * The values to select from if Datatype is DropDown for this custom field */ // @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field") public var values:[CustomFieldValueResponse] = [] required public init(){} } public class CustomFieldDataResponse : Codable { public var id:Int public var column:String public var name:String public var Description:String public var value:String /** * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox' */ // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'") public var dataType:String required public init(){} } public class UserAccessKeys : BaseModel { // @Required() public var companyId:String? // @Required() public var accessKeyTypeId:Int? // @Required() public var value:String? // @Required() public var customerId:String? public var Description:String // @Required() public var id:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case companyId case accessKeyTypeId case value case customerId case Description case id } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) companyId = try container.decodeIfPresent(String.self, forKey: .companyId) accessKeyTypeId = try container.decodeIfPresent(Int.self, forKey: .accessKeyTypeId) value = try container.decodeIfPresent(String.self, forKey: .value) customerId = try container.decodeIfPresent(String.self, forKey: .customerId) Description = try container.decodeIfPresent(String.self, forKey: .Description) id = try container.decodeIfPresent(String.self, forKey: .id) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if companyId != nil { try container.encode(companyId, forKey: .companyId) } if accessKeyTypeId != nil { try container.encode(accessKeyTypeId, forKey: .accessKeyTypeId) } if value != nil { try container.encode(value, forKey: .value) } if customerId != nil { try container.encode(customerId, forKey: .customerId) } if Description != nil { try container.encode(Description, forKey: .Description) } if id != nil { try container.encode(id, forKey: .id) } } } public class BaseModel : Codable { required public init(){} } public class CustomFieldValueResponse : Codable { public var value:String required public init(){} } public class CustomerCommentsResponse : Codable { public var id:Int public var customerId:String public var comments:String public var updated:Date public var created:Date public var imageUrl:Uri required public init(){} }