Compare commits
No commits in common. "c2768a486427ea49b29103444af83febcdb801c9" and "0f9515b90b15d4df0f9000317f5b640d42572d9a" have entirely different histories.
c2768a4864
...
0f9515b90b
@ -25,13 +25,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||||||
let navigationController = UINavigationController(rootViewController: employeeListVC)
|
let navigationController = UINavigationController(rootViewController: employeeListVC)
|
||||||
window.rootViewController = navigationController
|
window.rootViewController = navigationController
|
||||||
|
|
||||||
let appVersion = 1.5// get app version
|
|
||||||
let currentVersion = 1.0 //cached version
|
|
||||||
|
|
||||||
if appVersion != currentVersion {
|
|
||||||
EmployeeCacheService.shared.clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the window to the scene
|
// Set the window to the scene
|
||||||
self.window = window
|
self.window = window
|
||||||
window.makeKeyAndVisible()
|
window.makeKeyAndVisible()
|
||||||
|
|||||||
@ -1,44 +0,0 @@
|
|||||||
//
|
|
||||||
// EmployeeCacheService.swift
|
|
||||||
// EmployeeDirectory
|
|
||||||
//
|
|
||||||
// Created by Matt Bruce on 2/6/25.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
/// A service that handles image caching using memory, disk, and network in priority order.
|
|
||||||
public class EmployeeCacheService {
|
|
||||||
// MARK: - Properties
|
|
||||||
public static let shared = EmployeeCacheService() // Default shared instance
|
|
||||||
|
|
||||||
/// Memory cache for storing images in RAM.
|
|
||||||
private let emplyoees: Employees? = nil
|
|
||||||
|
|
||||||
/// File manager for handling disk operations.
|
|
||||||
private let fileManager = FileManager.default
|
|
||||||
|
|
||||||
/// Directory where cached images are stored on disk.
|
|
||||||
private let cacheDirectory: URL = {
|
|
||||||
FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0]
|
|
||||||
}()
|
|
||||||
|
|
||||||
// MARK: - Initializer
|
|
||||||
|
|
||||||
public init() {}
|
|
||||||
|
|
||||||
public func save(from employees: Employees) throws {
|
|
||||||
let data = try JSONEncoder().encode(employees)
|
|
||||||
try data.write(to: cacheDirectory.appendingPathComponent("employees.json"))
|
|
||||||
}
|
|
||||||
|
|
||||||
public func load() throws -> Employees {
|
|
||||||
let data = try Data(contentsOf: cacheDirectory.appendingPathComponent("employees.json"))
|
|
||||||
return try JSONDecoder().decode(Employees.self, from: data)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func clear() {
|
|
||||||
try? FileManager.default.removeItem(at: cacheDirectory.appendingPathComponent("employees.json"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -36,14 +36,8 @@ 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
|
||||||
|
|
||||||
@ -57,29 +51,7 @@ 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
|
return try await NetworkService.shared.fetchData(from: EmployeeServiceMode.production.endpoint, as: Employees.self)
|
||||||
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)
|
|
||||||
return employees
|
|
||||||
} else {
|
|
||||||
throw EmployeeServiceError.error
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user