// // UserStore.swift // Werkout_ios // // Created by Trey Tartt on 6/25/23. // import Foundation class UserStore: ObservableObject { static let userDefaultsRegisteredUserKey = "registeredUserKey" static let shared = UserStore() @Published public private(set) var registeredUser: RegisteredUser? init(registeredUser: RegisteredUser? = nil) { self.registeredUser = registeredUser if let data = UserDefaults.standard.data(forKey: UserStore.userDefaultsRegisteredUserKey), let model = try? JSONDecoder().decode(RegisteredUser.self, from: data) { self.registeredUser = model } } public var token: String? { guard let token = registeredUser?.token else { return nil } return "Token \(token)" } func login(postData: [String: Any], completion: @escaping (Bool)-> Void) { LoginFetchable(postData: postData).fetch(completion: { result in switch result { case .success(let model): DispatchQueue.main.async { self.registeredUser = model let data = try! JSONEncoder().encode(model) UserDefaults.standard.set(data, forKey: UserStore.userDefaultsRegisteredUserKey) completion(true) } case .failure(let failure): completion(false) } }) } func logout() { self.registeredUser = nil UserDefaults.standard.set(nil, forKey: UserStore.userDefaultsRegisteredUserKey) NotificationCenter.default.post(name: NSNotification.Name("CreatedNewWorkout"), object: nil, userInfo: nil) } func setFakeUser() { self.registeredUser = PreviewWorkout.parseRegisterdUser() } }