|
|
@@ -60,6 +60,7 @@ object EndpointResponse {
|
|
|
val teams_per_page = 25
|
|
|
val games_per_page = 25
|
|
|
val stats_per_page = 25
|
|
|
+ val stats_page_limit = 20
|
|
|
|
|
|
def doPaginatedRequest[T: Reader](
|
|
|
endpoint: String,
|
|
|
@@ -138,11 +139,35 @@ object EndpointResponse {
|
|
|
def getStats(game_ids: List[Int]): ListOfStats = {
|
|
|
implicit val gamesResponseR: Reader[StatsResponse] = macroR[StatsResponse]
|
|
|
|
|
|
- doPaginatedRequest[StatsResponse](
|
|
|
+ def getAllData(
|
|
|
+ endpoint: String,
|
|
|
+ params: Map[String, Any],
|
|
|
+ dataSoFar: ListOfStats = Nil,
|
|
|
+ page: Option[Int] = Some(1)
|
|
|
+ ): ListOfStats = {
|
|
|
+ page match {
|
|
|
+ case None => dataSoFar
|
|
|
+ case Some(value) if value > stats_page_limit => dataSoFar
|
|
|
+ case Some(value) =>
|
|
|
+ val response =
|
|
|
+ doPaginatedRequest[StatsResponse](
|
|
|
+ endpoint,
|
|
|
+ value,
|
|
|
+ stats_per_page,
|
|
|
+ params
|
|
|
+ )
|
|
|
+ getAllData(
|
|
|
+ endpoint,
|
|
|
+ params,
|
|
|
+ response.data ++ dataSoFar,
|
|
|
+ response.getNext()
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getAllData(
|
|
|
"https://www.balldontlie.io/api/v1/stats",
|
|
|
- 1,
|
|
|
- stats_per_page,
|
|
|
Map(("game_ids" -> game_ids))
|
|
|
- ).data
|
|
|
+ )
|
|
|
}
|
|
|
}
|