Untitled

 avatar
unknown
plain_text
19 days ago
2.2 kB
3
Indexable
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