BeeReel/BeeReel/Base/Network/Base/BRNetworkTarget.swift
2025-07-23 16:50:26 +08:00

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)
}
}