punchnet-macos/punchnet/Views/ResetPassword/ResetPasswordModel.swift
2026-03-23 23:29:29 +08:00

73 lines
2.0 KiB
Swift

//
// LoginState.swift
// punchnet
//
// Created by on 2026/1/16.
//
import Foundation
import Observation
import SwiftUI
@Observable
class ResetPasswordModel {
enum Stage: Equatable {
case requestVerifyCode
case submitVerifyCode
case resetPassword
case success
}
var stage: Stage = .requestVerifyCode
var transitionEdge: Edge = .trailing //
//
var username: String = ""
var sessionId: Int = 0
//
struct ResetPasswordSession: Codable {
let sessionId: Int
enum CodingKeys: String, CodingKey {
case sessionId = "session_id"
}
}
private let baseParams: [String: Any] = [
"client_id": SystemConfig.getClientId(),
"mac": SystemConfig.macAddressString(mac: SystemConfig.getMacAddress())
]
func requestVerifyCode(username: String) async throws -> ResetPasswordSession {
var params: [String: Any] = [
"username": username
]
params.merge(baseParams) {$1}
return try await SDLAPIClient.doPost(path: "/password/sendVerfiyCode", params: params, as: ResetPasswordSession.self)
}
func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String {
var params: [String: Any] = [
"session_id": sessionId,
"code": verifyCode,
]
params.merge(baseParams) {$1}
return try await SDLAPIClient.doPost(path: "/password/verfiyCode", params: params, as: String.self)
}
func resetPassword(sessionId: Int, newPassword: String) async throws -> String {
var params: [String: Any] = [
"session_id": sessionId,
"new_password": newPassword,
]
params.merge(baseParams) {$1}
return try await SDLAPIClient.doPost(path: "/password/reset", params: params, as: String.self)
}
}