Untitled
unknown
plain_text
9 months ago
2.2 kB
9
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
}
Editor is loading...
Leave a Comment