/* Options: Date: 2025-09-14 00:56:25 SwiftVersion: 6.0 Version: 8.80 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://api.bookmore.com //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: UpdateCustomer.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //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:InvoiceAddressToHandle? 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? public var responseStatus:String? public var subscribedToNewsletter:Bool? public var invoiceAddress:InvoiceAddressResponse? required public init(){} } public class AddCustomField : Codable { public var id:Int? public var value:String? required public init(){} } public class InvoiceAddressToHandle : 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 AddUserAccessKey : Codable { /** * Specify 'Id' to update an existing access key, leave empty to create a new one */ // @ApiMember(Description="Specify 'Id' to update an existing access key, leave empty to create a new one") public var id:String? /** * The company ID associated with this access key */ // @ApiMember(Description="The company ID associated with this access key") public var companyId:String? /** * The type of access key to create */ // @ApiMember(Description="The type of access key to create") public var accessKeyTypeId:Int? /** * The actual key value or token */ // @ApiMember(Description="The actual key value or token") public var value:String? /** * The customer ID this access key is associated with */ // @ApiMember(Description="The customer ID this access key is associated with") public var customerId:String? /** * A description or note about this access key */ // @ApiMember(Description="A description or note about this access key") public var Description:String? required public init(){} } public class DeleteUserAccessKey : Codable { /** * The unique identifier of the access key to delete */ // @ApiMember(Description="The unique identifier of the access key to delete") public var id:String? required public init(){} } public class InvoiceAddressResponse : Codable { public var invoiceAddressId:String? public var userId:String? 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(){} }