jsdw_ios/QuickLocation/API/UserAPI.swift

493 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: weixin、phone、apple、onekey、device、alipay
/// - bind:1绑定 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 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 signIn(latitude: Double, longitude: Double, address: String)
/// 更换手机号
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: get、add、del
/// - requestData:[String: Any] 根据操作传入对应的值
case emergencyContact(opType: String, requestData: [String: Any])
/// 删除账号
case deleteAccount
/// 退出登录
case logout
/// 发送快捷消息、表情
/// - Parameters:
/// - target_uid: 对方的user_id
/// - group_key:频道的key
/// - 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 .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, .signIn:
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, .phoneUsageTrips, .queryPhoneUsageIcon, .phoneLockApps, .phoneLocked, .phoneUnlockRequests, .phoneUnlockAllow, .signInInfo, .notice, .followList, .relations:
return .get
case .changePhone, .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 .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 .signIn(latitude, longitude, address):
return .requestParameters(
parameters: [
"latitude": latitude,
"longitude": longitude,
"address": address
],
encoding: JSONEncoding()
)
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())
}
}
}