81 lines
2.5 KiB
Swift
81 lines
2.5 KiB
Swift
//
|
|
// 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?
|
|
|
|
var plannedWorkouts = [PlannedWorkout]()
|
|
|
|
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 = PreviewData.parseRegisterdUser()
|
|
}
|
|
|
|
func fetchPlannedWorkouts() {
|
|
PlannedWorkoutFetchable().fetch(completion: { result in
|
|
switch result {
|
|
case .success(let models):
|
|
self.plannedWorkouts = models
|
|
case .failure(let failure):
|
|
fatalError("shit broke")
|
|
}
|
|
})
|
|
}
|
|
|
|
func plannedWorkoutFor(date: Date) -> PlannedWorkout? {
|
|
for plannedWorkout in plannedWorkouts {
|
|
if let plannedworkoutDate = plannedWorkout.date {
|
|
if Calendar.current.isDate(date, equalTo: plannedworkoutDate, toGranularity: .day) {
|
|
return plannedWorkout
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
}
|