Skip to content

Commit b22b4cd

Browse files
committed
feat: update popular game API primitives
1 parent 58decf9 commit b22b4cd

6 files changed

Lines changed: 61 additions & 17 deletions

File tree

shared/src/commonMain/kotlin/dev/vladleesi/braindanceapp/data/api/remote/GamesRemote.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,4 @@ class GamesRemote(
1616
igdbHttpClient.post(ApiConfig.Endpoints.GAMES) {
1717
setBody(requestBody.body)
1818
}
19-
20-
suspend fun popularityPrimitives(requestBody: RequestBody): HttpResponse =
21-
igdbHttpClient.post(ApiConfig.Endpoints.POPULARITY_PRIMITIVES) {
22-
setBody(requestBody.body)
23-
}
2419
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dev.vladleesi.braindanceapp.data.api.remote
2+
3+
import dev.vladleesi.braindanceapp.data.api.KtorClientManager
4+
import dev.vladleesi.braindanceapp.data.config.ApiConfig
5+
import dev.vladleesi.braindanceapp.data.models.request.RequestBody
6+
import io.ktor.client.request.post
7+
import io.ktor.client.request.setBody
8+
import io.ktor.client.statement.HttpResponse
9+
10+
class PopularityPrimitivesRemote(
11+
ktorClientManager: KtorClientManager,
12+
) {
13+
private val igdbHttpClient = ktorClientManager.igdbHttpClient
14+
15+
suspend fun popularityPrimitives(requestBody: RequestBody): HttpResponse =
16+
igdbHttpClient.post(ApiConfig.Endpoints.POPULARITY_PRIMITIVES) {
17+
setBody(requestBody.body)
18+
}
19+
}

shared/src/commonMain/kotlin/dev/vladleesi/braindanceapp/data/models/request/PopularityPrimitives.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,11 @@ enum class PopularityPrimitives(
77
WANT_TO_PLAY(2),
88
PLAYING(3),
99
PLAYED(4),
10+
PEAK_PLAYERS_24H(5),
11+
POSITIVE_REVIEWS(6),
12+
NEGATIVE_REVIEWS(7),
13+
TOTAL_REVIEWS(8),
14+
GLOBAL_TOP_SELLERS(9),
15+
MOST_WISHLISTED_UPCOMING(10),
16+
HOURS_WATCHED_24H(34),
1017
}

shared/src/commonMain/kotlin/dev/vladleesi/braindanceapp/data/repository/HomeRepo.kt

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package dev.vladleesi.braindanceapp.data.repository
22

33
import dev.vladleesi.braindanceapp.data.api.remote.GamesRemote
44
import dev.vladleesi.braindanceapp.data.models.games.GameItem
5-
import dev.vladleesi.braindanceapp.data.models.popularity.PopularityResponse
65
import dev.vladleesi.braindanceapp.data.models.request.PopularityPrimitives
76
import dev.vladleesi.braindanceapp.data.models.request.RequestBody
87
import dev.vladleesi.braindanceapp.utils.excludeAdultOnlyGames
98
import io.ktor.client.call.body
109

1110
class HomeRepo(
1211
private val gamesRemote: GamesRemote,
12+
private val primitivesRepo: PopularityPrimitivesRepo,
1313
) {
1414
suspend fun mostAnticipated(
1515
pageSize: Int,
@@ -35,17 +35,10 @@ class HomeRepo(
3535

3636
suspend fun popularRightNow(pageSize: Int): List<GameItem>? {
3737
val popularityResponses =
38-
gamesRemote
39-
.popularityPrimitives(
40-
requestBody =
41-
RequestBody
42-
.Builder {
43-
fields = listOf("game_id")
44-
where = listOf("popularity_type = ${PopularityPrimitives.VISITS.type}")
45-
sort = "value ${RequestBody.Sort.DESC.order}"
46-
limit = pageSize + pageSize // Extra results to compensate for filtered adult-only games
47-
}.build(),
48-
).body<List<PopularityResponse>?>()
38+
primitivesRepo.popularityPrimitives(
39+
type = PopularityPrimitives.HOURS_WATCHED_24H,
40+
pageSize = pageSize + pageSize, // Extra results to compensate for filtered adult-only games
41+
)
4942

5043
if (popularityResponses.isNullOrEmpty()) {
5144
return null
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.vladleesi.braindanceapp.data.repository
2+
3+
import dev.vladleesi.braindanceapp.data.api.remote.PopularityPrimitivesRemote
4+
import dev.vladleesi.braindanceapp.data.models.popularity.PopularityResponse
5+
import dev.vladleesi.braindanceapp.data.models.request.PopularityPrimitives
6+
import dev.vladleesi.braindanceapp.data.models.request.RequestBody
7+
import io.ktor.client.call.body
8+
9+
class PopularityPrimitivesRepo(
10+
private val remote: PopularityPrimitivesRemote,
11+
) {
12+
suspend fun popularityPrimitives(
13+
type: PopularityPrimitives,
14+
pageSize: Int,
15+
) = remote
16+
.popularityPrimitives(
17+
requestBody =
18+
RequestBody
19+
.Builder {
20+
fields = listOf("game_id")
21+
where = listOf("popularity_type = ${type.type}")
22+
sort = "value ${RequestBody.Sort.DESC.order}"
23+
limit = pageSize
24+
}.build(),
25+
).body<List<PopularityResponse>?>()
26+
}

shared/src/commonMain/kotlin/dev/vladleesi/braindanceapp/koin/SharedModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ import dev.vladleesi.braindanceapp.data.api.clients.TwitchClient
77
import dev.vladleesi.braindanceapp.data.api.remote.AuthRemote
88
import dev.vladleesi.braindanceapp.data.api.remote.GamerPowerRemote
99
import dev.vladleesi.braindanceapp.data.api.remote.GamesRemote
10+
import dev.vladleesi.braindanceapp.data.api.remote.PopularityPrimitivesRemote
1011
import dev.vladleesi.braindanceapp.data.repository.GameDetailsRepo
1112
import dev.vladleesi.braindanceapp.data.repository.GamerPowerRepo
1213
import dev.vladleesi.braindanceapp.data.repository.HomeRepo
14+
import dev.vladleesi.braindanceapp.data.repository.PopularityPrimitivesRepo
1315
import dev.vladleesi.braindanceapp.data.token.TokenStorage
1416
import dev.vladleesi.braindanceapp.ui.viewmodels.GameDetailsViewModel
1517
import dev.vladleesi.braindanceapp.ui.viewmodels.GiveawayDetailsViewModel
@@ -47,6 +49,7 @@ private val remoteModule =
4749
module {
4850
singleOf(::AuthRemote)
4951
singleOf(::GamesRemote)
52+
singleOf(::PopularityPrimitivesRemote)
5053
singleOf(::GamerPowerRemote)
5154
}
5255

@@ -55,6 +58,7 @@ private val repositoryModule =
5558
singleOf(::HomeRepo)
5659
singleOf(::GamerPowerRepo)
5760
singleOf(::GameDetailsRepo)
61+
singleOf(::PopularityPrimitivesRepo)
5862
}
5963

6064
private val viewModelModule =

0 commit comments

Comments
 (0)