|
|
@@ -88,3 +88,56 @@ object TeamsResponse {
|
|
|
getDataFromAllPages(Nil, Some(1))
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+case class EndpointResponse[T](data: T, meta: ResponseMetadata) {
|
|
|
+ type Params = Iterable[(String, String)]
|
|
|
+
|
|
|
+ def getNext() = {
|
|
|
+ if (meta.next_page == 0) {
|
|
|
+ None
|
|
|
+ } else {
|
|
|
+ Some(meta.next_page)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+object EndpointResponse {
|
|
|
+ type ListOfTeams = List[Team]
|
|
|
+ type TeamsResponse = EndpointResponse[ListOfTeams]
|
|
|
+
|
|
|
+ def doPaginatedRequest[T: Reader](
|
|
|
+ endpoint: String,
|
|
|
+ page: Int,
|
|
|
+ per_page: Int,
|
|
|
+ params: Map[String, Any] = Map()
|
|
|
+ ) = {
|
|
|
+ Utils
|
|
|
+ .get_and_decode[T](
|
|
|
+ endpoint,
|
|
|
+ params ++ Map("page" -> page, "per_page" -> per_page)
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ def getTeams(): ListOfTeams = {
|
|
|
+ implicit val teamsResponseR: Reader[TeamsResponse] = macroR[TeamsResponse]
|
|
|
+
|
|
|
+ def getAllData(
|
|
|
+ endpoint: String,
|
|
|
+ params: Map[String, Any] = Map()
|
|
|
+ ) = {
|
|
|
+ val response = doPaginatedRequest[TeamsResponse](endpoint, 1, 25, params)
|
|
|
+ response.getNext() match {
|
|
|
+ case Some(page) =>
|
|
|
+ response.data ++ (doPaginatedRequest[TeamsResponse](
|
|
|
+ endpoint,
|
|
|
+ page,
|
|
|
+ 25,
|
|
|
+ params
|
|
|
+ )).data
|
|
|
+ case None => response.data
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getAllData("https://www.balldontlie.io/api/v1/teams")
|
|
|
+ }
|
|
|
+}
|