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. // Created by Matt Bruce on 1/20/25.
// //
/// This will be the interface for the API for Employees /// This will be the interface for the API for Employees
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. /// - Parameter serviceMode: Mode in which to hit.
/// - Returns: An Employees struct /// - Returns: An Employees struct
func getEmployees(_ serviceMode: EmployeeServiceMode) async throws -> Employees 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 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 /// These are the testing URL Endpoints for different states
public enum EmployeeServiceMode: String, CaseIterable { public enum EmployeeServiceMode: String, CaseIterable {
case production case production
@ -48,14 +59,20 @@ public class EmployeeService: EmployeeServiceProtocol {
/// - page: The page number to fetch. /// - page: The page number to fetch.
/// - perPage: The number of employees per page. /// - perPage: The number of employees per page.
/// - Returns: A paginated Employees object. /// - 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 { guard var urlComponents = URLComponents(string: serviceMode.endpoint) else {
throw NetworkServiceError.invalidURL throw NetworkServiceError.invalidURL
} }
urlComponents.queryItems = [ urlComponents.queryItems = [
URLQueryItem(name: "page", value: "\(page)"), 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 { guard let url = urlComponents.url else {