medmap-ios/medmap/ViewModels/LoginViewModel.swift
Ricardo Araújo e095e0d0bb login page
2026-09-15 14:49:39 +01:00

51 lines
1.3 KiB
Swift

//
// LoginViewModel.swift
// medmap
//
import Foundation
@MainActor
final class LoginViewModel: ViewModel {
@Published var email = ""
@Published var password = ""
@Published private(set) var errorMessage: String?
@Published private(set) var authenticatedPatient: LoginResponse?
private let api: MedMapAPI
init(api: MedMapAPI = MedMapAPI()) {
self.api = api
super.init()
}
var canSubmit: Bool {
!email.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && !password.isEmpty && !isLoading
}
func login() async {
guard canSubmit else { return }
errorMessage = nil
isLoading = true
defer { isLoading = false }
do {
let response = try await api.login(
email: email.trimmingCharacters(in: .whitespacesAndNewlines),
password: password
)
guard response.role == .patient else {
errorMessage = "Esta aplicacao esta disponivel apenas para doentes."
return
}
authenticatedPatient = response
} catch {
errorMessage = "Nao foi possivel iniciar sessao. Confirme o email e a palavra-passe."
fluxlog("Patient login failed: \(error.localizedDescription)")
}
}
}