/* Options: Date: 2025-05-04 22:50:19 SwiftVersion: 6.0 Version: 8.71 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://team.evovoice.io //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: AppGetFiles.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/portal/files", "GET") public class AppGetFiles : ListRequest, IReturn { public typealias Return = ListResponse public var accountId:String? public var customerId:String? public var dateCreatedStart:String? public var dateCreatedEnd:String? public var fileNameFilter:String? public var type:FileTypes? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case accountId case customerId case dateCreatedStart case dateCreatedEnd case fileNameFilter case type } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) accountId = try container.decodeIfPresent(String.self, forKey: .accountId) customerId = try container.decodeIfPresent(String.self, forKey: .customerId) dateCreatedStart = try container.decodeIfPresent(String.self, forKey: .dateCreatedStart) dateCreatedEnd = try container.decodeIfPresent(String.self, forKey: .dateCreatedEnd) fileNameFilter = try container.decodeIfPresent(String.self, forKey: .fileNameFilter) type = try container.decodeIfPresent(FileTypes.self, forKey: .type) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if accountId != nil { try container.encode(accountId, forKey: .accountId) } if customerId != nil { try container.encode(customerId, forKey: .customerId) } if dateCreatedStart != nil { try container.encode(dateCreatedStart, forKey: .dateCreatedStart) } if dateCreatedEnd != nil { try container.encode(dateCreatedEnd, forKey: .dateCreatedEnd) } if fileNameFilter != nil { try container.encode(fileNameFilter, forKey: .fileNameFilter) } if type != nil { try container.encode(type, forKey: .type) } } } public class ListResponse : Codable { /** * The items */ // @ApiMember(Description="The items") public var items:[FileInfo]? /** * The total number of items */ // @ApiMember(Description="The total number of items") public var totalCount:Int? /** * The total number of pages */ // @ApiMember(Description="The total number of pages") public var totalPages:Int? /** * Are there more pages of items? Used with simplified paging */ // @ApiMember(Description="Are there more pages of items? Used with simplified paging") public var hasMorePages:Bool? required public init(){} } public enum SortOrders : String, Codable { case Ascend case Descend } public class ListRequest : IGet, Codable { /** * The page of data to retrieve */ // @ApiMember(Description="The page of data to retrieve") public var page:Int? /** * If you want all objects to be returned. This should be used with care */ // @ApiMember(Description="If you want all objects to be returned. This should be used with care") public var all:Bool? /** * The number per page to retrieve */ // @ApiMember(Description="The number per page to retrieve") public var countPerPage:Int? /** * Specific IDs */ // @ApiMember(Description="Specific IDs") public var specificIds:[String]? /** * Specify a sort field */ // @ApiMember(Description="Specify a sort field") public var sortField:String? /** * Specify a sort order */ // @ApiMember(Description="Specify a sort order") public var sortOrder:SortOrders? /** * Disables total / page counts - improves performance. Returns only data. If there is no more data, Items will be empty array */ // @ApiMember(Description="Disables total / page counts - improves performance. Returns only data. If there is no more data, Items will be empty array") public var simplifiedPaging:Bool? required public init(){} } public enum FileTypes : String, Codable { case Upload case VoiceMessage case CallRecording case Fax case Attachment case FaxOutgoing } public class EntityInfo : Codable { /** * The ID of the object */ // @ApiMember(Description="The ID of the object") public var id:String? /** * The date the object was created */ // @ApiMember(Description="The date the object was created") public var dateCreated:String? /** * The date the object was last modified */ // @ApiMember(Description="The date the object was last modified") public var dateLastModified:String? /** * The user that created this object */ // @ApiMember(Description="The user that created this object") public var createdBy:String? /** * The user that last modified this object */ // @ApiMember(Description="The user that last modified this object") public var lastModifiedBy:String? required public init(){} } public class CustomerBreadcrumb : Codable { public var id:String? public var name:String? required public init(){} } public class FileInfo : EntityInfo { /** * The type of file this is */ // @ApiMember(Description="The type of file this is") public var type:FileTypes? /** * The account ID this file is associated with */ // @ApiMember(Description="The account ID this file is associated with") public var accountId:String? /** * The name of the account this file is associated with */ // @ApiMember(Description="The name of the account this file is associated with") public var accountName:String? /** * The ID of the customer this file is associated with */ // @ApiMember(Description="The ID of the customer this file is associated with") public var customerId:String? /** * The name of the customer this file is associated with */ // @ApiMember(Description="The name of the customer this file is associated with") public var customerName:String? /** * The breadcrumb to the customer for this file */ // @ApiMember(Description="The breadcrumb to the customer for this file") public var customerBreadcrumb:[CustomerBreadcrumb]? /** * The ID of the user this file is assocaited with */ // @ApiMember(Description="The ID of the user this file is assocaited with") public var userId:String? /** * The name of the user this file is associated with */ // @ApiMember(Description="The name of the user this file is associated with") public var userName:String? /** * The original file name for the file */ // @ApiMember(Description="The original file name for the file") public var fileName:String? /** * The URI of the file */ // @ApiMember(Description="The URI of the file") public var uri:String? /** * The Content type of the file */ // @ApiMember(Description="The Content type of the file") public var contentType:String? /** * The size of the file */ // @ApiMember(Description="The size of the file") public var contentLength:Int? /** * The Twilio ID of the recording */ // @ApiMember(Description="The Twilio ID of the recording") public var recordingSid:String? /** * The duration of the recording in seconds */ // @ApiMember(Description="The duration of the recording in seconds") public var recordingDuration:Int? /** * Who is the recording from? */ // @ApiMember(Description="Who is the recording from?") public var recordingFrom:String? /** * Transcription (if available) */ // @ApiMember(Description="Transcription (if available)") public var transcription:String? /** * From Address (e.g. caller ID) for incoming calls */ // @ApiMember(Description="From Address (e.g. caller ID) for incoming calls") public var fromAddress:String? /** * To Address (e.g. dialed number) for outgoing calls */ // @ApiMember(Description="To Address (e.g. dialed number) for outgoing calls") public var toAddress:String? /** * The AI transcription for this call */ // @ApiMember(Description="The AI transcription for this call") public var aiTranscription:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case type case accountId case accountName case customerId case customerName case customerBreadcrumb case userId case userName case fileName case uri case contentType case contentLength case recordingSid case recordingDuration case recordingFrom case transcription case fromAddress case toAddress case aiTranscription } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) type = try container.decodeIfPresent(FileTypes.self, forKey: .type) accountId = try container.decodeIfPresent(String.self, forKey: .accountId) accountName = try container.decodeIfPresent(String.self, forKey: .accountName) customerId = try container.decodeIfPresent(String.self, forKey: .customerId) customerName = try container.decodeIfPresent(String.self, forKey: .customerName) customerBreadcrumb = try container.decodeIfPresent([CustomerBreadcrumb].self, forKey: .customerBreadcrumb) ?? [] userId = try container.decodeIfPresent(String.self, forKey: .userId) userName = try container.decodeIfPresent(String.self, forKey: .userName) fileName = try container.decodeIfPresent(String.self, forKey: .fileName) uri = try container.decodeIfPresent(String.self, forKey: .uri) contentType = try container.decodeIfPresent(String.self, forKey: .contentType) contentLength = try container.decodeIfPresent(Int.self, forKey: .contentLength) recordingSid = try container.decodeIfPresent(String.self, forKey: .recordingSid) recordingDuration = try container.decodeIfPresent(Int.self, forKey: .recordingDuration) recordingFrom = try container.decodeIfPresent(String.self, forKey: .recordingFrom) transcription = try container.decodeIfPresent(String.self, forKey: .transcription) fromAddress = try container.decodeIfPresent(String.self, forKey: .fromAddress) toAddress = try container.decodeIfPresent(String.self, forKey: .toAddress) aiTranscription = try container.decodeIfPresent(String.self, forKey: .aiTranscription) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if type != nil { try container.encode(type, forKey: .type) } if accountId != nil { try container.encode(accountId, forKey: .accountId) } if accountName != nil { try container.encode(accountName, forKey: .accountName) } if customerId != nil { try container.encode(customerId, forKey: .customerId) } if customerName != nil { try container.encode(customerName, forKey: .customerName) } if customerBreadcrumb != nil { try container.encode(customerBreadcrumb, forKey: .customerBreadcrumb) } if userId != nil { try container.encode(userId, forKey: .userId) } if userName != nil { try container.encode(userName, forKey: .userName) } if fileName != nil { try container.encode(fileName, forKey: .fileName) } if uri != nil { try container.encode(uri, forKey: .uri) } if contentType != nil { try container.encode(contentType, forKey: .contentType) } if contentLength != nil { try container.encode(contentLength, forKey: .contentLength) } if recordingSid != nil { try container.encode(recordingSid, forKey: .recordingSid) } if recordingDuration != nil { try container.encode(recordingDuration, forKey: .recordingDuration) } if recordingFrom != nil { try container.encode(recordingFrom, forKey: .recordingFrom) } if transcription != nil { try container.encode(transcription, forKey: .transcription) } if fromAddress != nil { try container.encode(fromAddress, forKey: .fromAddress) } if toAddress != nil { try container.encode(toAddress, forKey: .toAddress) } if aiTranscription != nil { try container.encode(aiTranscription, forKey: .aiTranscription) } } }