2025-04-21 14:30:28 +08:00

119 lines
2.7 KiB
Swift

//
// SPApi.swift
// Thimra
//
// Created by on 2025/4/8.
//
import UIKit
import Moya
import SmartCodable
struct SPNetworkData<T: SmartCodable> {
var parameters: SPNetworkParameters?
var completion: ((_ response: SPNetworkResponse<T>) -> Void)?
}
struct SPNetworkParameters {
var baseURL: URL?
var parameters: [String : Any]?
var method: Moya.Method = .post
var path: String
var isLoding: Bool = false
var isToast: Bool = true
}
struct SPNetworkResponse<T: SmartCodable>: SmartCodable {
var code: Int?
var data: T?
var msg: String?
///
@IgnoredKey
var rawData: Any?
}
enum SPApi {
case request(parameters: SPNetworkParameters)
case uploadFile(parameters: SPNetworkParameters)
case downloadFile(parameters: SPNetworkParameters)
}
extension SPApi: TargetType {
var baseURL: URL {
return URL(string: SPBaseURL)!
}
var path: String {
switch self {
case .request(let parameters):
return SPURLPathPrefix + parameters.path
default:
return ""
}
}
var method: Moya.Method {
switch self {
case .request(let parameters):
return parameters.method
default:
return .post
}
}
var task: Moya.Task {
switch self {
case .request(let parameters):
let p = parameters.parameters ?? [:]
return .requestParameters(parameters: p, encoding: getEncoding())
default:
return .requestParameters(parameters: [:], encoding: getEncoding())
}
}
var headers: [String : String]? {
let userToken = SPLoginManager.manager.token?.token ?? ""
var dic: [String : String] = [
"system-version" : kSP_osVersion,
"lang-key" : SPLocalizedManager.shared.currentLocalizedKey,//
"time-zone" : String.timeZone(), //
"app-version" : kSPAPPVersion,
"device-id" : JXUUID.systemUUID(), //id
"brand" : "apple", //
"app-name" : "",
"system-type" : "ios",
"idfa" : JXUUID.idfa(),
"model" : UIDevice.sp_machineModelName(),
// "security" : "false",
]
//
dic["authorization"] = userToken
return dic
}
}
extension TargetType {
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
}
}
}