Untitled
import Foundation class LoginViewModel: ObservableObject { @Published var isLoading: Bool = false @Published var loginMessage: String = "" @Published var isLoginSuccessful: Bool = false private var baseURL: String { guard let url = ProcessInfo.processInfo.environment["BACKEND_URL"] else { fatalError("Backend URL not found in environment variables") } return url } func login(email: String, password: String) { guard let url = URL(string: "\(baseURL)/login") else { self.loginMessage = "Invalid URL" return } var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let loginRequest = LoginRequest(email: email, password: password) guard let requestBody = try? JSONEncoder().encode(loginRequest) else { self.loginMessage = "Failed to encode request" return } request.httpBody = requestBody isLoading = true URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { self?.isLoading = false } if let error = error { DispatchQueue.main.async { self?.loginMessage = "Error: \(error.localizedDescription)" } return } guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { DispatchQueue.main.async { self?.loginMessage = "Invalid response from server" } return } guard let data = data, let loginResponse = try? JSONDecoder().decode(LoginResponse.self, from: data) else { DispatchQueue.main.async { self?.loginMessage = "Failed to decode response" } return }
Leave a Comment