CommunicateAPI.swift 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 imUploadFile(String, String, String, Data)
  19. }
  20. extension CommunicateAPI: OOAPIContextCapable {
  21. var apiContextKey: String {
  22. return "x_message_assemble_communicate"
  23. }
  24. }
  25. // 是否需要xtoken
  26. extension CommunicateAPI: OOAccessTokenAuthorizable {
  27. var shouldAuthorize: Bool {
  28. return true
  29. }
  30. }
  31. extension CommunicateAPI: TargetType {
  32. var baseURL: URL {
  33. let model = O2AuthSDK.shared.centerServerInfo()?.assembles?["x_message_assemble_communicate"]
  34. let baseURLString = "\(model?.httpProtocol ?? "http")://\(model?.host ?? ""):\(model?.port ?? 0)\(model?.context ?? "")"
  35. return URL(string: baseURLString)!
  36. }
  37. var path: String {
  38. switch self {
  39. case .myConversationList:
  40. return "/jaxrs/im/conversation/list/my"
  41. case .msgListByPaging(let page, let size, _):
  42. return "/jaxrs/im/msg/list/\(page)/size/\(size)"
  43. case .sendMsg(_):
  44. return "/jaxrs/im/msg"
  45. case .readConversation(let conversationId):
  46. return "/jaxrs/im/conversation/\(conversationId)/read"
  47. case .instantMessageList(let count):
  48. return "/jaxrs/instant/list/currentperson/noim/count/\(count)/desc"
  49. case .createConversation(_):
  50. return "/jaxrs/im/conversation"
  51. case .imUploadFile(let conversationId, let type, _, _):
  52. return "/jaxrs/im/msg/upload/\(conversationId)/type/\(type)"
  53. }
  54. }
  55. var method: Moya.Method {
  56. switch self {
  57. case .myConversationList, .instantMessageList(_):
  58. return .get
  59. case .msgListByPaging(_, _, _), .sendMsg(_), .createConversation(_), .imUploadFile(_, _, _, _):
  60. return .post
  61. case .readConversation(_):
  62. return .put
  63. }
  64. }
  65. var sampleData: Data {
  66. return "".data(using: String.Encoding.utf8)!
  67. }
  68. var task: Task {
  69. switch self {
  70. case .myConversationList, .instantMessageList(_), .readConversation(_):
  71. return .requestPlain
  72. case .msgListByPaging(_, _, let conversationId):
  73. let form = IMMessageRequestForm()
  74. form.conversationId = conversationId
  75. return .requestParameters(parameters: form.toJSON()!, encoding: JSONEncoding.default)
  76. case .sendMsg(let msg):
  77. return .requestParameters(parameters: msg.toJSON()!, encoding: JSONEncoding.default)
  78. case .createConversation(let conv):
  79. return .requestParameters(parameters: conv.toJSON()!, encoding: JSONEncoding.default)
  80. case .imUploadFile(_, _, let fileName, let data):
  81. //字符串类型 文件名
  82. let strData = fileName.data(using: .utf8)
  83. let fileNameData = MultipartFormData(provider: .data(strData!), name: "fileName")
  84. //文件类型
  85. let fileData = MultipartFormData(provider: .data(data), name: "file", fileName: fileName)
  86. return .uploadMultipart([fileData, fileNameData])
  87. }
  88. }
  89. var headers: [String : String]? {
  90. return nil
  91. }
  92. }