refactored out passing service mode
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
0f4cd465b1
commit
0f9515b90b
@ -10,7 +10,6 @@
|
|||||||
public protocol EmployeeServiceProtocol {
|
public protocol EmployeeServiceProtocol {
|
||||||
|
|
||||||
/// This will get a list of all employees
|
/// This will get a list of all employees
|
||||||
/// - Parameter serviceMode: Mode in which to hit.
|
|
||||||
/// - Returns: An Employees struct
|
/// - Returns: An Employees struct
|
||||||
func getEmployees(_ serviceMode: EmployeeServiceMode) async throws -> Employees
|
func getEmployees() async throws -> Employees
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,11 +7,22 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// These are the testing URL Endpoints for different states
|
/// These are the testing URL Endpoints for different states
|
||||||
public enum EmployeeServiceMode: String, CaseIterable {
|
internal enum EmployeeServiceMode: String, CaseIterable {
|
||||||
case production
|
case production
|
||||||
case malformed
|
case malformed
|
||||||
case empty
|
case empty
|
||||||
|
|
||||||
|
public var service: EmployeeServiceProtocol {
|
||||||
|
switch self {
|
||||||
|
case .production:
|
||||||
|
return EmployeeService.shared
|
||||||
|
case .malformed:
|
||||||
|
return EmployeeMalformedService.shared
|
||||||
|
case .empty:
|
||||||
|
return EmployeeEmptyService.shared
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Enpoint in which to grabe employees from.
|
/// Enpoint in which to grabe employees from.
|
||||||
public var endpoint: String {
|
public var endpoint: String {
|
||||||
switch self {
|
switch self {
|
||||||
@ -39,7 +50,45 @@ public class EmployeeService: EmployeeServiceProtocol {
|
|||||||
/// This will get a list of all employees
|
/// This will get a list of all employees
|
||||||
/// - 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(_ serviceMode: EmployeeServiceMode = .production) async throws -> Employees {
|
public func getEmployees() async throws -> Employees {
|
||||||
return try await NetworkService.shared.fetchData(from: serviceMode.endpoint, as: Employees.self)
|
return try await NetworkService.shared.fetchData(from: EmployeeServiceMode.production.endpoint, as: Employees.self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Service Layer for Employees
|
||||||
|
public class EmployeeMalformedService: EmployeeServiceProtocol {
|
||||||
|
// MARK: - Properties
|
||||||
|
public static let shared = EmployeeMalformedService() // Default shared instance
|
||||||
|
|
||||||
|
// MARK: - Initializer
|
||||||
|
|
||||||
|
public init() {}
|
||||||
|
|
||||||
|
// MARK: - Public Methods
|
||||||
|
|
||||||
|
/// This will get a list of all employees
|
||||||
|
/// - Parameter serviceMode: Mode in which to hit.
|
||||||
|
/// - Returns: An Employees struct
|
||||||
|
public func getEmployees() async throws -> Employees {
|
||||||
|
return try await NetworkService.shared.fetchData(from: EmployeeServiceMode.malformed.endpoint, as: Employees.self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Service Layer for Employees
|
||||||
|
public class EmployeeEmptyService: EmployeeServiceProtocol {
|
||||||
|
// MARK: - Properties
|
||||||
|
public static let shared = EmployeeEmptyService() // Default shared instance
|
||||||
|
|
||||||
|
// MARK: - Initializer
|
||||||
|
|
||||||
|
public init() {}
|
||||||
|
|
||||||
|
// MARK: - Public Methods
|
||||||
|
|
||||||
|
/// This will get a list of all employees
|
||||||
|
/// - Parameter serviceMode: Mode in which to hit.
|
||||||
|
/// - Returns: An Employees struct
|
||||||
|
public func getEmployees() async throws -> Employees {
|
||||||
|
return try await NetworkService.shared.fetchData(from: EmployeeServiceMode.empty.endpoint, as: Employees.self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -158,6 +158,6 @@ extension EmployeesViewController {
|
|||||||
case 2: selectedMode = .empty
|
case 2: selectedMode = .empty
|
||||||
default: return
|
default: return
|
||||||
}
|
}
|
||||||
viewModel.changeMode(to: selectedMode)
|
viewModel.changeService(to: selectedMode.service)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import Foundation
|
|||||||
/// specifically with the EmployeesViewController.
|
/// specifically with the EmployeesViewController.
|
||||||
@MainActor
|
@MainActor
|
||||||
public class EmployeesViewModel: ObservableObject {
|
public class EmployeesViewModel: ObservableObject {
|
||||||
private var serviceMode: EmployeeServiceMode = .production
|
private var employeeService: EmployeeServiceProtocol = EmployeeService()
|
||||||
|
|
||||||
@Published public private(set) var employees: [Employee] = []
|
@Published public private(set) var employees: [Employee] = []
|
||||||
@Published public private(set) var errorMessage: String? = nil
|
@Published public private(set) var errorMessage: String? = nil
|
||||||
@ -27,7 +27,7 @@ public class EmployeesViewModel: ObservableObject {
|
|||||||
Task {
|
Task {
|
||||||
do {
|
do {
|
||||||
// Fetch employees using the async method
|
// Fetch employees using the async method
|
||||||
let wrapper = try await EmployeeService.shared.getEmployees(serviceMode)
|
let wrapper = try await employeeService.getEmployees()
|
||||||
|
|
||||||
// Update published properties
|
// Update published properties
|
||||||
employees = wrapper.employees
|
employees = wrapper.employees
|
||||||
@ -43,8 +43,8 @@ public class EmployeesViewModel: ObservableObject {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public func changeMode(to mode: EmployeeServiceMode) {
|
public func changeService(to employeeService: EmployeeServiceProtocol) {
|
||||||
serviceMode = mode
|
self.employeeService = employeeService
|
||||||
fetchEmployees()
|
fetchEmployees()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user