jsdw_ios/QuickLocation/API/UserAPI.swift

492 lines
16 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// UserAPI.swift
// QuickLocation
//
// Created by on 2026/5/28.
//
import Moya
import SwiftyUserDefaults
internal import Alamofire
/// API
enum UserAPI {
///
/// - Parameters:
/// - type: weixinphoneappleonekeydevicealipay
/// - bind1 2
case login(type: String,
bind: String,
data: [String: Any])
///
case userInfo
///
case userStatus
/// 使
case phoneUsageToday(userId: String, groupKey: String)
/// APP 使
case phoneUsagePeriod(userId: String, groupKey: String, period: String)
/// 使
case phoneUsageReport(userId: String, groupKey: String)
///
case phoneUsageTrips(userId: String, date: Int64)
///
case queryPhoneUsageIcon(package: String)
///
case savePhoneUsageIcon(package: String, icon: String)
///
case phoneLockApp(token: String, icon: String)
///
case phoneLockApps(userId: String, groupKey: String)
/// token
case phoneLockAppsDelete(os: String, tokens: [String])
///
case phoneLock(os: String, groupKey: String, userId: String, tokens: [String], iconIndex: Int, message: String)
///
case phoneLocked(os: String)
///
case requestPhoneUnlock(os: String, groupKey: String, tokens: [String])
///
case phoneUnlockRequests(os: String)
///
case phoneUnlock(os: String, groupKey: String, userId: String, tokens: [String])
/// 线
case phoneUnlockAllow(os: String)
///
case phoneUnlockAllowConfirm(os: String, groupKey: String, userId: String, tokens: [String])
/// IM Token
case imToken
///
case signInInfo
///
case changePhone(timestamp: String, phone: String, code: String)
/// URL
case setHeadPic(headPic: String)
case changeAvater(url: String)
///
case setNickName(nick: String)
///
/// - Parameters:
/// - moodIndex: json
case setMood(moodIndex: Int)
///
/// - Parameters:
/// - sex: 1 2
case setGender(sex: Int)
///
/// - Parameters:
/// - opType: getadddel
/// - requestData[String: Any]
case emergencyContact(opType: String, requestData: [String: Any])
///
case deleteAccount
/// 退
case logout
///
/// - Parameters:
/// - target_uid: user_id
/// - group_keykey
/// - emote_idx
case sendEmote(emoteIdx: Int, groupKey: String, targetUid: String)
///
case notice
///
case followList
///
/// - Parameters:
/// - enable:
/// - keep_time
case bubble(enable: Bool, keep_time: Int)
///
case setEmail(email: String)
///
case relations
///
case mailboxList(page: Int, size: Int)
///
case mailboxOperate(opType: String, id: Int?)
///
case feedback(type: String, content: String, contact: String, images: [String])
}
extension UserAPI: MultiTargetProtocol {
var path: String {
switch self {
case .login:
return "api/user/login"
case .userInfo:
return "api/user"
case .userStatus:
return "mapi/user/status"
case .phoneUsageToday:
return "mapi/phone/usage/today"
case .phoneUsagePeriod:
return "mapi/phone/usage/period"
case .phoneUsageReport:
return "mapi/phone/usage/report"
case .phoneUsageTrips:
return "mapi/phone/usage/trips"
case .queryPhoneUsageIcon, .savePhoneUsageIcon:
return "mapi/phone/usage/icon"
case .phoneLockApp:
return "mapi/phone/lock/app"
case .phoneLockApps:
return "mapi/phone/lock/apps"
case .phoneLockAppsDelete:
return "mapi/phone/lock/apps/delete"
case .phoneLock:
return "mapi/phone/lock"
case .phoneLocked:
return "mapi/phone/locked"
case .requestPhoneUnlock, .phoneUnlockRequests:
return "mapi/phone/unlock/request"
case .phoneUnlock:
return "mapi/phone/unlock"
case .phoneUnlockAllow, .phoneUnlockAllowConfirm:
return "mapi/phone/unlock/allow"
case .imToken:
return "mapi/openim/user/token/get"
case .signInInfo:
return "mapi/user/signin"
case .changePhone, .changeAvater:
return "api/user"
case .setHeadPic:
return "mapi/user/setheadpic"
case .setNickName:
return "mapi/user/setnick"
case .setMood:
return "mapi/user/setmood"
case .setGender:
return "mapi/user/setsex"
case .emergencyContact:
return "mapi/user/emergencycontact"
case .deleteAccount:
return "mapi/user/account"
case .logout:
return "api/user/logout"
case .sendEmote:
return "mapi/user/sendemote"
case .notice:
return "api/user/notice"
case .followList:
return "mapi/user/followed"
case .bubble:
return "mapi/bubble/operate"
case .setEmail:
return "mapi/user/signin/setemail"
case .relations:
return "mapi/user/relations"
case .mailboxList:
return "mapi/user/mailbox/list"
case .mailboxOperate:
return "mapi/user/mailbox/operate"
case .feedback:
return "api/user/feedback"
}
}
var method: Moya.Method {
switch self {
case .userInfo, .userStatus, .phoneUsageToday, .phoneUsagePeriod, .phoneUsageReport, .phoneUsageTrips, .queryPhoneUsageIcon, .phoneLockApps, .phoneLocked, .phoneUnlockRequests, .phoneUnlockAllow, .signInInfo, .notice, .followList, .relations:
return .get
case .changePhone, .setGender, .changeAvater:
return .put
case .deleteAccount:
return .delete
default:
return .post
}
}
var task: Moya.Task {
switch self {
case let .login(type, bind, data):
var params = Parameters()
params["type"] = type
params["bind"] = bind
params["data"] = data
return .requestParameters(parameters: params, encoding: JSONEncoding())
case .userInfo:
return .requestParameters(parameters: Parameters(), encoding: URLEncoding())
case .userStatus:
return .requestPlain
case let .phoneUsageToday(userId, groupKey):
let params: Parameters = [
"user_id": userId,
"group_key": groupKey
]
return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
case let .phoneUsagePeriod(userId, groupKey, period):
let params: Parameters = [
"user_id": userId,
"group_key": groupKey,
"period": period
]
return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
case let .phoneUsageReport(userId, groupKey):
let params: Parameters = [
"user_id": userId,
"group_key": groupKey
]
return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
case let .phoneUsageTrips(userId, date):
let params: Parameters = [
"user_id": userId,
"date": NSNumber(value: date),
"simplify": "true",
"include_events": "false"
]
return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
case let .queryPhoneUsageIcon(package):
return .requestParameters(parameters: ["package": package], encoding: URLEncoding.queryString)
case let .savePhoneUsageIcon(package, icon):
return .requestParameters(
parameters: ["package": package, "icon": icon],
encoding: JSONEncoding()
)
case let .phoneLockApp(token, icon):
return .requestParameters(
parameters: [
"os": "ios",
"token": token,
"icon": icon
],
encoding: JSONEncoding()
)
case let .phoneLockApps(userId, groupKey):
return .requestParameters(
parameters: [
"user_id": userId,
"group_key": groupKey
],
encoding: URLEncoding.queryString
)
case let .phoneLockAppsDelete(os, tokens):
return .requestParameters(
parameters: [
"os": os,
"token": tokens.count > 0 ? tokens : ["cn.zuom8.jisuloca"]
],
encoding: JSONEncoding()
)
case let .phoneLock(os, groupKey, userId, tokens, iconIndex, message):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"user_id": userId,
"token": tokens,
"icon_index": iconIndex,
"message": message
],
encoding: JSONEncoding()
)
case let .phoneLocked(os):
return .requestParameters(
parameters: ["os": os],
encoding: URLEncoding.queryString
)
case let .requestPhoneUnlock(os, groupKey, tokens):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"token": tokens
],
encoding: JSONEncoding()
)
case let .phoneUnlockRequests(os):
return .requestParameters(
parameters: ["os": os],
encoding: URLEncoding.queryString
)
case let .phoneUnlock(os, groupKey, userId, tokens):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"user_id": userId,
"token": tokens
],
encoding: JSONEncoding()
)
case let .phoneUnlockAllow(os):
return .requestParameters(
parameters: ["os": os],
encoding: URLEncoding.queryString
)
case let .phoneUnlockAllowConfirm(os, groupKey, userId, tokens):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"user_id": userId,
"token": tokens
],
encoding: JSONEncoding()
)
case .imToken:
var params = Parameters()
params["platform_id"] = 1
params["force"] = true
return .requestParameters(parameters: params, encoding: JSONEncoding())
case .signInInfo:
return .requestParameters(parameters: Parameters(), encoding: URLEncoding())
case let .changeAvater(url):
var params = Parameters()
params["avater"] = url
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .changePhone(timestamp, phone, code):
var params = Parameters()
params["phone_timestamp"] = timestamp
params["phone"] = phone
params["phone_code"] = code
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setHeadPic(headPic):
var params = Parameters()
params["head_pic_index"] = headPic
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setNickName(nick):
var params = Parameters()
params["nick"] = nick
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setMood(moodIndex):
var params = Parameters()
params["mood_index"] = moodIndex
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setGender(sex):
var params = Parameters()
params["sex"] = sex
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .emergencyContact(opType, requestData):
var params = Parameters()
params["op_type"] = opType
params.merge(requestData) { _, new in new }
return .requestParameters(parameters: params, encoding: JSONEncoding())
case .deleteAccount:
return .requestParameters(parameters: Parameters(), encoding: URLEncoding())
case .logout:
return .requestParameters(parameters: Parameters(), encoding: JSONEncoding())
case let .sendEmote(emoteIdx, groupKey, targetUid):
var params = Parameters()
params["emote_idx"] = emoteIdx
params["group_key"] = groupKey
params["target_uid"] = targetUid
return .requestParameters(parameters: params, encoding: JSONEncoding())
case .notice:
return .requestParameters(parameters: Parameters(), encoding: URLEncoding())
case .followList:
return .requestParameters(parameters: Parameters(), encoding: URLEncoding())
case let .bubble(enable, keep_time):
var params = Parameters()
params["enable"] = enable
if keep_time != -1 {
params["keep_time"] = keep_time
}
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setEmail(email):
var params = Parameters()
params["email"] = email
return .requestParameters(parameters: params, encoding: JSONEncoding())
case .relations:
return .requestPlain
case let .mailboxList(page, size):
return .requestParameters(
parameters: ["page": page, "size": size],
encoding: JSONEncoding()
)
case let .mailboxOperate(opType, id):
var params: Parameters = ["op_type": opType]
if let id {
params["id"] = id
}
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .feedback(type, content, contact, images):
let params: Parameters = [
"type": type,
"content": content,
"contact": contact,
"images": images
]
return .requestParameters(parameters: params, encoding: JSONEncoding())
}
}
}