diff --git a/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift b/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift index 2271916..b9a161e 100644 --- a/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift +++ b/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift @@ -5,12 +5,11 @@ // Created by Matt Bruce on 1/20/25. // - /// This will be the interface for the API for Employees public protocol EmployeeServiceProtocol { /// This will get a list of all employees /// - Parameter serviceMode: Mode in which to hit. /// - Returns: An Employees struct func getEmployees(_ serviceMode: EmployeeServiceMode) async throws -> Employees - func getEmployees(_ serviceMode: EmployeeServiceMode, page: Int, perPage: Int) async throws -> Employees + func getEmployees(_ serviceMode: EmployeeServiceMode, page: Int, perPage: Int, sortField: EmployeeSortField, sortOrder: EmployeeSortOrder) async throws -> Employees } diff --git a/EmployeeDirectory/Services/EmployeeService.swift b/EmployeeDirectory/Services/EmployeeService.swift index 5ce3abd..8871645 100644 --- a/EmployeeDirectory/Services/EmployeeService.swift +++ b/EmployeeDirectory/Services/EmployeeService.swift @@ -6,6 +6,17 @@ // import Foundation +public enum EmployeeSortField: String { + case fullName + case team + case employeeType +} + +public enum EmployeeSortOrder: String { + case ascending = "asc" + case descending = "desc" +} + /// These are the testing URL Endpoints for different states public enum EmployeeServiceMode: String, CaseIterable { case production @@ -48,14 +59,20 @@ public class EmployeeService: EmployeeServiceProtocol { /// - page: The page number to fetch. /// - perPage: The number of employees per page. /// - Returns: A paginated Employees object. - public func getEmployees(_ serviceMode: EmployeeServiceMode = .production, page: Int, perPage: Int) async throws -> Employees { + public func getEmployees(_ serviceMode: EmployeeServiceMode = .production, + page: Int, perPage: Int, + sortField: EmployeeSortField = .fullName, + sortOrder: EmployeeSortOrder = .ascending) async throws -> Employees { + guard var urlComponents = URLComponents(string: serviceMode.endpoint) else { throw NetworkServiceError.invalidURL } urlComponents.queryItems = [ URLQueryItem(name: "page", value: "\(page)"), - URLQueryItem(name: "perPage", value: "\(perPage)") + URLQueryItem(name: "perPage", value: "\(perPage)"), + URLQueryItem(name: "sortField", value: "\(sortField.rawValue)"), + URLQueryItem(name: "sortOrder", value: "\(sortOrder.rawValue)") ] guard let url = urlComponents.url else {