CommunicateAPI.swift 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //
  2. // CommunicateAPI.swift
  3. // O2Platform
  4. //
  5. // Created by FancyLou on 2020/6/4.
  6. // Copyright © 2020 zoneland. All rights reserved.
  7. //
  8. import Moya
  9. import O2OA_Auth_SDK
  10. // MARK: - 消息模块
  11. enum CommunicateAPI {
  12. case myConversationList
  13. case msgListByPaging(Int, Int, String)
  14. case sendMsg(IMMessageInfo)
  15. case readConversation(String)
  16. case instantMessageList(Int)
  17. case createConversation(IMConversationInfo)
  18. case updateConversationTitle(String, String)
  19. case updateConversationPeople(String, [String])
  20. case imUploadFile(String, String, String, Data)
  21. case imDownloadFullFile(String, String)
  22. }
  23. extension CommunicateAPI: OOAPIContextCapable {
  24. var apiContextKey: String {
  25. return "x_message_assemble_communicate"
  26. }
  27. }
  28. // 是否需要xtoken
  29. extension CommunicateAPI: OOAccessTokenAuthorizable {
  30. var shouldAuthorize: Bool {
  31. return true
  32. }
  33. }
  34. extension CommunicateAPI: TargetType {
  35. var baseURL: URL {
  36. let model = O2AuthSDK.shared.centerServerInfo()?.assembles?["x_message_assemble_communicate"]
  37. let baseURLString = "\(model?.httpProtocol ?? "http")://\(model?.host ?? ""):\(model?.port ?? 0)\(model?.context ?? "")"
  38. return URL(string: baseURLString)!
  39. }
  40. var path: String {
  41. switch self {
  42. case .myConversationList:
  43. return "/jaxrs/im/conversation/list/my"
  44. case .msgListByPaging(let page, let size, _):
  45. return "/jaxrs/im/msg/list/\(page)/size/\(size)"
  46. case .sendMsg(_):
  47. return "/jaxrs/im/msg"
  48. case .readConversation(let conversationId):
  49. return "/jaxrs/im/conversation/\(conversationId)/read"
  50. case .instantMessageList(let count):
  51. return "/jaxrs/instant/list/currentperson/noim/count/\(count)/desc"
  52. case .createConversation(_):
  53. return "/jaxrs/im/conversation"
  54. case .updateConversationTitle(_, _), .updateConversationPeople(_, _):
  55. return "/jaxrs/im/conversation"
  56. case .imUploadFile(let conversationId, let type, _, _):
  57. return "/jaxrs/im/msg/upload/\(conversationId)/type/\(type)"
  58. case .imDownloadFullFile(let id, _):
  59. return "/jaxrs/im/msg/download/\(id)"
  60. }
  61. }
  62. var method: Moya.Method {
  63. switch self {
  64. case .myConversationList, .instantMessageList(_), .imDownloadFullFile(_, _):
  65. return .get
  66. case .msgListByPaging(_, _, _), .sendMsg(_), .createConversation(_), .imUploadFile(_, _, _, _):
  67. return .post
  68. case .readConversation(_), .updateConversationPeople(_, _), .updateConversationTitle(_, _):
  69. return .put
  70. }
  71. }
  72. var sampleData: Data {
  73. return "".data(using: String.Encoding.utf8)!
  74. }
  75. var task: Task {
  76. switch self {
  77. case .myConversationList, .instantMessageList(_), .readConversation(_):
  78. return .requestPlain
  79. case .msgListByPaging(_, _, let conversationId):
  80. let form = IMMessageRequestForm()
  81. form.conversationId = conversationId
  82. return .requestParameters(parameters: form.toJSON()!, encoding: JSONEncoding.default)
  83. case .sendMsg(let msg):
  84. return .requestParameters(parameters: msg.toJSON()!, encoding: JSONEncoding.default)
  85. case .createConversation(let conv):
  86. return .requestParameters(parameters: conv.toJSON()!, encoding: JSONEncoding.default)
  87. case .updateConversationTitle(let id, let title):
  88. let form = IMConversationUpdateForm()
  89. form.id = id
  90. form.title = title
  91. return .requestParameters(parameters: form.toJSON()!, encoding: JSONEncoding.default)
  92. case .updateConversationPeople(let id, let people):
  93. let form = IMConversationUpdateForm()
  94. form.id = id
  95. form.personList = people
  96. return .requestParameters(parameters: form.toJSON()!, encoding: JSONEncoding.default)
  97. case .imUploadFile(_, _, let fileName, let data):
  98. //字符串类型 文件名
  99. let strData = fileName.data(using: .utf8)
  100. let fileNameData = MultipartFormData(provider: .data(strData!), name: "fileName")
  101. //文件类型
  102. let fileData = MultipartFormData(provider: .data(data), name: "file", fileName: fileName)
  103. return .uploadMultipart([fileData, fileNameData])
  104. case .imDownloadFullFile(let id, let fileExtension):
  105. let myDest:DownloadDestination = { temporaryURL, response in
  106. //本地存储
  107. return (O2IMFileManager.shared.localFilePath(fileId: id, ext: fileExtension), [.removePreviousFile, .createIntermediateDirectories])
  108. }
  109. return .downloadDestination(myDest)
  110. }
  111. }
  112. var headers: [String : String]? {
  113. return nil
  114. }
  115. }