Files
bookibra/ios/Bookibra/ViewModels/AuthViewModel.swift

54 lines
1.6 KiB
Swift

import Foundation
@MainActor
final class AuthViewModel: ObservableObject {
enum Mode: String, CaseIterable {
case login
case register
}
static let tokenKey = "bookibra.jwt"
static let emailKey = "bookibra.email"
@Published var mode: Mode = .login
@Published var email = ""
@Published var password = ""
@Published var isLoading = false
@Published var errorMessage: String?
private let authService: AuthServiceProtocol
private let keychain: KeychainStoreProtocol
init(authService: AuthServiceProtocol, keychain: KeychainStoreProtocol) {
self.authService = authService
self.keychain = keychain
}
func submit(onSuccess: @escaping () -> Void) async {
guard !email.isEmpty, !password.isEmpty else {
errorMessage = "E-posta ve şifre gerekli"
return
}
isLoading = true
defer { isLoading = false }
do {
let response: AuthResponse
switch mode {
case .login:
response = try await authService.login(email: email, password: password)
case .register:
response = try await authService.register(email: email, password: password)
}
_ = try await authService.profile(token: response.token)
_ = keychain.save(response.token, for: Self.tokenKey)
_ = keychain.save(response.user.email, for: Self.emailKey)
onSuccess()
} catch {
errorMessage = error.localizedDescription
}
}
}