diff --git a/EmployeeDirectory/Services/MockEmployeeService.swift b/EmployeeDirectory/Services/MockEmployeeService.swift index 05564bf..754fdda 100644 --- a/EmployeeDirectory/Services/MockEmployeeService.swift +++ b/EmployeeDirectory/Services/MockEmployeeService.swift @@ -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.. [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) } + } + } +}