Visual_Novel_iOS/crush/Crush/Src/API/AuthApi.swift

157 lines
4.0 KiB
Swift

//
// AuthApi.swift
// Crush
//
// Created by Leon on 2025/7/28.
//
import Foundation
import Moya
enum RegisterType: String {
case EMAIL
case MOBILE
case THIRD
}
enum SMSCodeType: Int {
case email = 0
case mobile_login = 1
case reset_password = 2
}
enum LoginSMSCodeFrom: String {
case WHATS_APP
case MOBILE
}
enum SendTypeEnum: String {
case SMS
case WHATS_APP
}
enum ThirdType: String, Codable {
case APPLE = "APPLE"
case GOOGLE = "GOOGLE"
case DISCORD = "DISCORD"
}
// let LoginProvider = MoyaProvider<LoginAPI>(requestClosure: myRequestClosure)
// MoyaProvider.immediatelyStub
let LoginProvider = APIConfig.useMock && LoginAPI.useMock
? MoyaProvider<LoginAPI>(endpointClosure: myEndpointClosure, stubClosure: { target in
let data = target.sampleData
if data.count > 0 {
return .delayed(seconds: 0.5)
} else {
return .never
}
})
: MoyaProvider<LoginAPI>(requestClosure: myRequestClosure)
enum LoginAPI {
static let useMock: Bool = false
///
case loginByThird(params: [String: Any])
case registerThird(thirdToken: String, thirdType: ThirdType = .APPLE, nickname: String)
///
case completeUserInfo(params: [String: Any])
}
extension LoginAPI: TargetType {
var baseURL: URL {
return URL(string: APIConfig.frog)!
}
var path: String {
switch self {
case .loginByThird:
return "/web/third/login"
case .registerThird:
return "/mobile/user/register/by-third"
case .completeUserInfo:
return "/web/user/complete-user-info"
}
}
var method: Moya.Method {
return .post
}
// var sampleData: Data {
// return "".data(using: String.Encoding.utf8)!
// }
var task: Task {
var mParams = [String: Any]()
switch self {
case let .loginByThird(params):
mParams = params
case let .registerThird(thirdToken, thirdType, nickname):
mParams = ["thirdToken": thirdToken, "thirdType": thirdType.rawValue, "nickname": nickname]
case let .completeUserInfo(params):
mParams = params
}
mParams.updateValue("IOS", forKey: "appClient")
mParams.updateValue(UIDevice.UUID, forKey: "deviceCode")
// if let code = HCaptchaHandler.shared.reqValidateCodeForLoginAPI {
// mParams.updateValue(code, forKey: "reqValidateCode")
// }
return .requestParameters(parameters: mParams, encoding: JSONEncoding.default)
}
var headers: [String: String]? {
return APIConfig.apiHeaders()
}
static func getGMTFlagForSignUp() -> String? {
if let abbreviation = TimeZone.current.abbreviation() {
let pure = abbreviation.replacingOccurrences(of: "GMT", with: "")
if let gmt = Int(pure) {
if gmt > 0 {
let format = String(format: "+%02d", gmt)
dlog("❇️ GMT Flag: \(format)")
return format
} else {
let format = String(format: "-%02d", gmt)
dlog("❇️ GMT Flag: \(format)")
return format
}
}
}
return nil
}
var sampleData: Data {
switch self {
case .loginByThird:
let content = """
{
"token": "LvRK8TGeMGbPRfQWeyuSV4o0XqXkDJDN"
}
"""
return .okContent(string: content)
case .completeUserInfo:
let mockJSON = """
{
"status" : "OK",
"errorCode" : null,
"content" : null,
"errorMsg" : null,
"traceId" : "b46cb53f-550c-46aa-8ccd-28f968f97e0a"
}
"""
return Data(mockJSON.utf8)
default:
return Data()
}
}
}