feat: ios mobil arayüz tasarımı
This commit is contained in:
53
ios/Bookibra/ViewModels/AuthViewModel.swift
Normal file
53
ios/Bookibra/ViewModels/AuthViewModel.swift
Normal file
@@ -0,0 +1,53 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user