Compare commits
No commits in common. "8a086f4bd447575dd3cce7bea605e87fbe1d06d8" and "eeefcf19b737be7c64f4487c2195eb9103a7fb48" have entirely different histories.
8a086f4bd4
...
eeefcf19b7
@ -10,8 +10,6 @@ import UIKit
|
|||||||
|
|
||||||
/// A service that handles image caching using memory, disk, and network in priority order.
|
/// A service that handles image caching using memory, disk, and network in priority order.
|
||||||
public class EmployeeCacheService {
|
public class EmployeeCacheService {
|
||||||
private lazy var fileURL = cacheDirectory.appendingPathComponent("employees.json")
|
|
||||||
|
|
||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
public static let shared = EmployeeCacheService() // Default shared instance
|
public static let shared = EmployeeCacheService() // Default shared instance
|
||||||
|
|
||||||
@ -32,15 +30,15 @@ public class EmployeeCacheService {
|
|||||||
|
|
||||||
public func save(from employees: Employees) throws {
|
public func save(from employees: Employees) throws {
|
||||||
let data = try JSONEncoder().encode(employees)
|
let data = try JSONEncoder().encode(employees)
|
||||||
try data.write(to: fileURL)
|
try data.write(to: cacheDirectory.appendingPathComponent("employees.json"))
|
||||||
}
|
}
|
||||||
|
|
||||||
public func load() throws -> Employees {
|
public func load() throws -> Employees {
|
||||||
let data = try Data(contentsOf: fileURL)
|
let data = try Data(contentsOf: cacheDirectory.appendingPathComponent("employees.json"))
|
||||||
return try JSONDecoder().decode(Employees.self, from: data)
|
return try JSONDecoder().decode(Employees.self, from: data)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func clear() {
|
public func clear() {
|
||||||
try? FileManager.default.removeItem(at: fileURL)
|
try? FileManager.default.removeItem(at: cacheDirectory.appendingPathComponent("employees.json"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,11 @@ internal enum EmployeeServiceMode: String, CaseIterable {
|
|||||||
|
|
||||||
/// Service Layer for Employees
|
/// Service Layer for Employees
|
||||||
public class EmployeeService: EmployeeServiceProtocol {
|
public class EmployeeService: EmployeeServiceProtocol {
|
||||||
|
public enum EmployeeServiceError: Error {
|
||||||
|
case error
|
||||||
|
//case LoadError
|
||||||
|
//case other(Error)
|
||||||
|
}
|
||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
public static let shared = EmployeeService() // Default shared instance
|
public static let shared = EmployeeService() // Default shared instance
|
||||||
|
|
||||||
@ -53,20 +57,28 @@ public class EmployeeService: EmployeeServiceProtocol {
|
|||||||
/// - Parameter serviceMode: Mode in which to hit.
|
/// - Parameter serviceMode: Mode in which to hit.
|
||||||
/// - Returns: An Employees struct
|
/// - Returns: An Employees struct
|
||||||
public func getEmployees() async throws -> Employees {
|
public func getEmployees() async throws -> Employees {
|
||||||
|
var employees: Employees
|
||||||
let cache = EmployeeCacheService.shared
|
let cache = EmployeeCacheService.shared
|
||||||
|
do {
|
||||||
//try to load the employees
|
employees = try cache.load()
|
||||||
if let 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)
|
||||||
return employees
|
return employees
|
||||||
} else {
|
} else {
|
||||||
//fetch the employees
|
throw EmployeeServiceError.error
|
||||||
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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user