Compare commits

...

2 Commits

Author SHA1 Message Date
8a086f4bd4 refactored getEmployees
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
2025-02-06 15:45:36 -06:00
a6679a56e9 clean up vars
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
2025-02-06 15:45:27 -06:00
2 changed files with 17 additions and 27 deletions

View File

@ -10,6 +10,8 @@ import UIKit
/// A service that handles image caching using memory, disk, and network in priority order.
public class EmployeeCacheService {
private lazy var fileURL = cacheDirectory.appendingPathComponent("employees.json")
// MARK: - Properties
public static let shared = EmployeeCacheService() // Default shared instance
@ -30,15 +32,15 @@ public class EmployeeCacheService {
public func save(from employees: Employees) throws {
let data = try JSONEncoder().encode(employees)
try data.write(to: cacheDirectory.appendingPathComponent("employees.json"))
try data.write(to: fileURL)
}
public func load() throws -> Employees {
let data = try Data(contentsOf: cacheDirectory.appendingPathComponent("employees.json"))
let data = try Data(contentsOf: fileURL)
return try JSONDecoder().decode(Employees.self, from: data)
}
public func clear() {
try? FileManager.default.removeItem(at: cacheDirectory.appendingPathComponent("employees.json"))
try? FileManager.default.removeItem(at: fileURL)
}
}

View File

@ -39,11 +39,7 @@ internal enum EmployeeServiceMode: String, CaseIterable {
/// Service Layer for Employees
public class EmployeeService: EmployeeServiceProtocol {
public enum EmployeeServiceError: Error {
case error
//case LoadError
//case other(Error)
}
// MARK: - Properties
public static let shared = EmployeeService() // Default shared instance
@ -57,28 +53,20 @@ public class EmployeeService: EmployeeServiceProtocol {
/// - Parameter serviceMode: Mode in which to hit.
/// - Returns: An Employees struct
public func getEmployees() async throws -> Employees {
var employees: Employees
let cache = EmployeeCacheService.shared
do {
employees = try cache.load()
return employees
} catch {
if let networkFound = try? await fetchNetworkEmployees() {
employees = networkFound
return employees
}
}
throw EmployeeServiceError.error
}
public func fetchNetworkEmployees() async throws -> Employees {
var employees: Employees
if let networkFound = try? await NetworkService.shared.fetchData(from: EmployeeServiceMode.production.endpoint, as: Employees.self) {
employees = networkFound
try? EmployeeCacheService.shared.save(from: employees)
//try to load the employees
if let employees = try? cache.load() {
return employees
} else {
throw EmployeeServiceError.error
//fetch the employees
let employees = try await NetworkService.shared.fetchData(from: EmployeeServiceMode.production.endpoint, as: Employees.self)
//save to cache
try? EmployeeCacheService.shared.save(from: employees)
//return class
return employees
}
}
}