adding sorting to protocol
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
31c4f08303
commit
285b448bce
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user