diff --git a/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift b/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift index 809baf2..2271916 100644 --- a/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift +++ b/EmployeeDirectory/Protocols/EmployeeServiceProtocol.swift @@ -8,9 +8,9 @@ /// 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 } diff --git a/EmployeeDirectory/Services/EmployeeService.swift b/EmployeeDirectory/Services/EmployeeService.swift index 3104502..5ce3abd 100644 --- a/EmployeeDirectory/Services/EmployeeService.swift +++ b/EmployeeDirectory/Services/EmployeeService.swift @@ -42,4 +42,28 @@ public class EmployeeService: EmployeeServiceProtocol { public func getEmployees(_ serviceMode: EmployeeServiceMode = .production) async throws -> Employees { return try await NetworkService.shared.fetchData(from: serviceMode.endpoint, as: Employees.self) } + + /// Fetch employees with pagination support + /// - Parameters: + /// - 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 { + guard var urlComponents = URLComponents(string: serviceMode.endpoint) else { + throw NetworkServiceError.invalidURL + } + + urlComponents.queryItems = [ + URLQueryItem(name: "page", value: "\(page)"), + URLQueryItem(name: "perPage", value: "\(perPage)") + ] + + guard let url = urlComponents.url else { + throw NetworkServiceError.invalidURL + } + + let request = RequestBuilder(url: url, method: .get).build() + + return try await NetworkService.shared.fetchData(with: request, as: Employees.self) + } }