added mock sorting
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
68ab23aefd
commit
31c4f08303
@ -9,7 +9,7 @@ import Foundation
|
||||
public class MockEmployeeService: EmployeeServiceProtocol {
|
||||
// MARK: - Properties
|
||||
public static let shared = MockEmployeeService() // Default shared instance
|
||||
private let employees: Employees
|
||||
private var employees: Employees
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
@ -28,7 +28,16 @@ public class MockEmployeeService: EmployeeServiceProtocol {
|
||||
return employees
|
||||
}
|
||||
|
||||
public func getEmployees(_ serviceMode: EmployeeServiceMode, page: Int, perPage: Int) async throws -> Employees {
|
||||
public func getEmployees(_ serviceMode: EmployeeServiceMode = .production,
|
||||
page: Int, perPage: Int,
|
||||
sortField: EmployeeSortField = .team,
|
||||
sortOrder: EmployeeSortOrder = .ascending) async throws -> Employees {
|
||||
|
||||
employees = .init(employees: employees.employees.sorted(by: sortField, with: sortOrder),
|
||||
total: employees.employees.count,
|
||||
page: page,
|
||||
perPage: perPage)
|
||||
|
||||
let totalUsers = employees.employees.count
|
||||
let startIndex = (page - 1) * perPage
|
||||
let endIndex = min(startIndex + perPage, totalUsers)
|
||||
@ -36,8 +45,28 @@ public class MockEmployeeService: EmployeeServiceProtocol {
|
||||
guard startIndex < totalUsers else {
|
||||
return .init(employees: [], total: totalUsers, page: page, perPage: perPage) // Return empty if out of bounds
|
||||
}
|
||||
print("Fetching Page", page, "of", totalUsers)
|
||||
let paginatedUsers = Array(employees.employees[startIndex..<endIndex])
|
||||
return .init(employees: paginatedUsers, total: totalUsers, page: page, perPage: perPage)
|
||||
}
|
||||
}
|
||||
|
||||
extension Array where Element == Employee {
|
||||
func sorted(by field: EmployeeSortField, with option: EmployeeSortOrder) -> [Employee] {
|
||||
switch field {
|
||||
case .fullName:
|
||||
return option == .ascending
|
||||
? sorted { $0.fullName < $1.fullName }
|
||||
: sorted { $0.fullName > $1.fullName }
|
||||
|
||||
case .team:
|
||||
return option == .ascending
|
||||
? sorted { $0.team < $1.team || ($0.team == $1.team && $0.fullName < $1.fullName) }
|
||||
: sorted { $0.team > $1.team || ($0.team == $1.team && $0.fullName < $1.fullName) }
|
||||
|
||||
case .employeeType:
|
||||
return option == .ascending
|
||||
? sorted { $0.employeeType.rawValue < $1.employeeType.rawValue || ($0.employeeType.rawValue == $1.employeeType.rawValue && $0.fullName < $1.fullName) }
|
||||
: sorted { $0.employeeType.rawValue > $1.employeeType.rawValue || ($0.employeeType.rawValue == $1.employeeType.rawValue && $0.fullName < $1.fullName) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user