107 lines
2.7 KiB
Swift
107 lines
2.7 KiB
Swift
//
|
|
// BRNetworkTarget.swift
|
|
// BeeReel
|
|
//
|
|
// Created by 湖南秦九 on 2025/6/24.
|
|
//
|
|
|
|
|
|
import Moya
|
|
import SmartCodable
|
|
|
|
struct BRNetworkData<T: SmartCodable> {
|
|
var parameters: BRNetworkParameters?
|
|
var completion: ((_ response: BRNetworkResponse<T>) -> Void)?
|
|
}
|
|
|
|
struct BRNetworkParameters {
|
|
var baseURL: URL?
|
|
var parameters: [String : Any]?
|
|
var method: Moya.Method = .post
|
|
var path: String
|
|
var isLoding: Bool = false
|
|
var isToast: Bool = true
|
|
}
|
|
|
|
struct BRNetworkResponse<T: SmartCodable>: SmartCodable {
|
|
var code: Int?
|
|
var data: T?
|
|
var msg: String?
|
|
|
|
///原始数据
|
|
@IgnoredKey
|
|
var rawData: Any?
|
|
}
|
|
|
|
enum BRNetworkTarget {
|
|
case request(parameters: BRNetworkParameters)
|
|
}
|
|
|
|
extension BRNetworkTarget: TargetType {
|
|
var baseURL: URL {
|
|
return .init(string: BRBaseURL)!
|
|
}
|
|
|
|
var path: String {
|
|
switch self {
|
|
case .request(let parameters):
|
|
return BRURLPathPrefix + parameters.path
|
|
}
|
|
}
|
|
|
|
var method: Moya.Method {
|
|
switch self {
|
|
case .request(let parameters):
|
|
return parameters.method
|
|
}
|
|
}
|
|
|
|
var task: Moya.Task {
|
|
switch self {
|
|
case .request(let parameters):
|
|
let parameters = parameters.parameters ?? [:]
|
|
return .requestParameters(parameters: parameters, encoding: getEncoding())
|
|
}
|
|
}
|
|
|
|
var headers: [String : String]? {
|
|
let userToken = BRLoginManager.manager.token?.token ?? ""
|
|
let dic: [String : String] = [
|
|
"system-version" : kBROsVersion,
|
|
"lang-key" : BRLocalizedManager.manager.currentLocalizedKey,//当前语言
|
|
"time-zone" : self.timeZone(), //时区
|
|
"app-version" : kBRAPPVersion,
|
|
"device-id" : JXUUID.uuid(), //设备id
|
|
"brand" : "apple", //品牌
|
|
"app-name" : kBRAPPBundleIdentifier,
|
|
"system-type" : "ios",
|
|
"idfa" : JXUUID.idfa(),
|
|
"model" : UIDevice.br_machineModelName(),
|
|
"authorization" : userToken,
|
|
"device-gaid" : JXUUID.idfv()
|
|
]
|
|
return dic
|
|
}
|
|
|
|
}
|
|
|
|
extension BRNetworkTarget {
|
|
var sampleData: Data { return "".data(using: String.Encoding.utf8)! }
|
|
|
|
func getEncoding() -> ParameterEncoding {
|
|
switch self.method {
|
|
case .get, .delete:
|
|
return URLEncoding.default
|
|
default:
|
|
return JSONEncoding.default
|
|
}
|
|
}
|
|
|
|
func timeZone() -> String {
|
|
let timeZone = NSTimeZone.local as NSTimeZone
|
|
let timeZoneSecondsFromGMT = timeZone.secondsFromGMT / 3600
|
|
return String(format: "GMT+0%d:00", timeZoneSecondsFromGMT)
|
|
}
|
|
|
|
}
|