// // 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 /// 用户IM Token case imToken /// 更换手机号 case changePhone(timestamp: String, phone: String, code: String) /// 设置头像 case setHeadPic(index: Int) /// 昵称 case setNickName(nick: String) /// 性别 /// - Parameters: /// - sex: 1 男 2 女 case setGender(sex: Int) /// 紧急联系人 /// - Parameters: /// - opType: get、add /// - requestData:[String: Any] 根据操作传入对应的值 case emergencyContact(opType: String, requestData: [String: Any]) /// 删除账号 case deleteAccount /// 退出登录 case logout } extension UserAPI: MultiTargetProtocol { var path: String { switch self { case .login: return "api/user/login" case .userInfo: return "api/user" case .imToken: return "mapi/openim/user/token/get" case .changePhone: return "api/user" case .setHeadPic: return "mapi/user/setheadpic" case .setNickName: return "mapi/user/setnick" case .setGender: return "api/user" case .emergencyContact: return "mapi/user/emergencycontact" case .deleteAccount: return "mapi/user/account" case .logout: return "api/user/logout" } } var method: Moya.Method { switch self { case .userInfo: return .get case .changePhone, .setGender: 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 .imToken: var params = Parameters() params["platform_id"] = 1 params["force"] = true 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(index): var params = Parameters() params["head_pic_index"] = index return .requestParameters(parameters: params, encoding: JSONEncoding()) case let .setNickName(nick): var params = Parameters() params["nick"] = nick 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()) } } }