TSNetWork+Business.swift 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // TSNetWork+Business.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/1/16.
  6. //
  7. /// 基础 URL(根据需求修改)
  8. private let baseURL = "http://ai.100yearslater.com"
  9. import Alamofire
  10. enum TSNeURLType:String {
  11. case imageEmoji = "/api/image/emoji" //文生emoji
  12. case actionInfo = "/api/action/info" //查询生成过程接口
  13. case chat = "/api/text/chat" //AI 对话接口
  14. case textPicCreate = "/api/image/create" //文生图
  15. case upload = "/api/upload" //上传图片
  16. case imageRewrite = "/api/image/rewrite" //图生图
  17. case chatV2 = "/api/text/chat/v2" //AI 对话接口V2,扩展了 DeepSeek 深度思考
  18. case config = "/api/ops/aichat-config" //App配置
  19. case changeAge = "/api/image/change-age" //换年龄
  20. func getUrlString() -> String {
  21. return baseURL + self.rawValue
  22. }
  23. }
  24. extension TSNetworkManager {
  25. /// 通用 get 请求
  26. func get<T: TSBaseModel>(
  27. urlType: TSNeURLType,
  28. parameters: [String: Any]? = nil,
  29. responseType: T.Type? = nil,
  30. completion: @escaping (Result<Any, Error>) -> Void
  31. ) -> Request {
  32. let urlString = urlType.getUrlString()
  33. return request(method: .get, urlString: urlString, parameters:parameters) { result in
  34. completion(result)
  35. }
  36. }
  37. /// 通用 POST 请求
  38. /// - Parameters:
  39. /// - endpoint: 接口路径
  40. /// - parameters: 请求参数
  41. /// - responseType: 响应数据模型(可选)
  42. /// - completion: 请求完成的回调
  43. func post<T: TSBaseModel>(
  44. urlType: TSNeURLType,
  45. parameters: [String: Any]? = nil,
  46. responseType: T.Type? = nil,
  47. completion: @escaping (Result<Any, Error>) -> Void
  48. ) -> Request {
  49. let urlString = urlType.getUrlString()
  50. return request(method: .post, urlString: urlString, parameters:parameters) { result in
  51. completion(result)
  52. }
  53. }
  54. // /// 通用 POST Stream 请求
  55. // /// - Parameters:
  56. // /// - endpoint: 接口路径
  57. // /// - parameters: 请求参数
  58. // /// - responseType: 响应数据模型(可选)
  59. // /// - completion: 请求完成的回调
  60. // func postStream<T: TSBaseModel>(
  61. // urlType: TSNeURLType,
  62. // parameters: [String: Any]? = nil,
  63. // responseType: T.Type? = nil,
  64. // streamHandler:@escaping (String) -> Void,
  65. // completion: @escaping (Result<Any, Error>) -> Void
  66. // ) -> StreamPostRequest{
  67. // let urlString = urlType.getUrlString()
  68. //
  69. // let streamRequest = StreamPostRequest(url: URL(string: urlString)!, parameters: parameters) { data in
  70. // if let string = String(data: data, encoding: .utf8) {
  71. // print("Received chunk: \(string)")
  72. // streamHandler(string)
  73. // }
  74. // } completionHandler: { error in
  75. // if let error = error {
  76. // print("Request failed with error: \(error)")
  77. // completion(.failure(error))
  78. // } else {
  79. // print("Request completed successfully.")
  80. // completion(.success("success"))
  81. // }
  82. // }
  83. // streamRequest.startRequest()
  84. // return streamRequest
  85. // }
  86. /// 通用 POST Stream 请求
  87. /// - Parameters:
  88. /// - endpoint: 接口路径
  89. /// - parameters: 请求参数
  90. /// - responseType: 响应数据模型(可选)
  91. /// - completion: 请求完成的回调
  92. func postStream<T: TSBaseModel>(
  93. urlType: TSNeURLType,
  94. parameters: [String: Any]? = nil,
  95. responseType: T.Type? = nil,
  96. streamHandler:@escaping (String) -> Void,
  97. completion: @escaping (Result<Any, Error>) -> Void
  98. ) -> Request?{
  99. let urlString = urlType.getUrlString()
  100. let streamRequest = postStreamRequest(urlString: urlString, parameters: parameters, streamHandler: streamHandler, completion: completion)
  101. return streamRequest
  102. }
  103. /// 上传多个 Data 数据
  104. /// - Parameters:
  105. /// - urlType: TSNeURLType
  106. /// - dataArray: Data 数组,每个元素是一个字典,包含 Data 和字段名
  107. /// - parameters: 其他参数(可选)
  108. /// - headers: 自定义请求头(可选)
  109. /// - completion: 完成回调,返回结果或错误
  110. func uploadData<T: TSBaseModel>(
  111. urlType: TSNeURLType,
  112. dataArray: [[String: Any]], // Data 数组,每个元素包含 Data 和字段名
  113. parameters: [String: Any]? = nil,
  114. responseType: T.Type? = nil,
  115. progressHandler: @escaping (Float) -> Void, // 上传进度回调
  116. completion: @escaping (Result<Any, Error>) -> Void
  117. ) -> Request?{
  118. let urlString = urlType.getUrlString()
  119. let request = uploadData(urlString: urlString,dataArray:dataArray, parameters: parameters, progressHandler: { progress in
  120. progressHandler(Float(progress.fractionCompleted))
  121. },completion: completion)
  122. return request
  123. }
  124. }