adding sorting to protocol

Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
Matt Bruce 2025-01-21 12:04:32 -06:00
parent 31c4f08303
commit 285b448bce
2 changed files with 20 additions and 4 deletions

View File

@ -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
}

View File

@ -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 {