Skip to content

Commit 01e5e03

Browse files
committed
[Update] remove navigation from library-marvelapi
[Update] remove search for characters and comics
1 parent 9f4567c commit 01e5e03

39 files changed

Lines changed: 208 additions & 473 deletions

File tree

app/src/androidTest/java/com/rumosoft/marvelcompose/data/FakeCharactersNetwork.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
package com.rumosoft.marvelcompose.data
22

3-
import com.rumosoft.characters.data.repository.CHARACTERS_SEARCH_LIMIT
3+
import com.rumosoft.characters.data.repository.CHARACTERS_LIMIT
44
import com.rumosoft.marvelapi.data.network.CharactersNetwork
55
import com.rumosoft.marvelapi.data.network.HeroesResult
66
import com.rumosoft.marvelapi.data.network.apimodels.HeroDto
77
import com.rumosoft.marvelapi.data.network.apimodels.PaginationInfo
88
import javax.inject.Inject
99

1010
class FakeCharactersNetwork @Inject constructor(): CharactersNetwork {
11-
override suspend fun searchHeroes(
11+
override suspend fun getHeroes(
1212
offset: Int,
1313
limit: Int,
14-
nameStartsWith: String
1514
): Result<HeroesResult> {
1615
val heroesResult = HeroesResult(
1716
paginationInfo = PaginationInfo(
1817
current = 0,
1918
total = 0,
2019
),
21-
characters = (offset .. offset + CHARACTERS_SEARCH_LIMIT).map {
20+
characters = (offset .. offset + CHARACTERS_LIMIT).map {
2221
HeroDto(
2322
id = it.toLong(),
2423
name = "character $it",
@@ -33,7 +32,7 @@ class FakeCharactersNetwork @Inject constructor(): CharactersNetwork {
3332
}
3433

3534
override suspend fun getHeroDetails(heroId: Long): Result<HeroDto?> {
36-
val hero = searchHeroes(0, 0, "").getOrNull()?.characters?.find { it.id == heroId }
35+
val hero = getHeroes(0, 0).getOrNull()?.characters?.find { it.id == heroId }
3736
return hero?.let {
3837
Result.success(it)
3938
} ?: Result.failure(Exception("Hero not found"))

app/src/androidTest/java/com/rumosoft/marvelcompose/data/FakeComicsNetwork.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
package com.rumosoft.marvelcompose.data
22

3-
import com.rumosoft.characters.data.repository.CHARACTERS_SEARCH_LIMIT
43
import com.rumosoft.marvelapi.data.network.ComicsNetwork
54
import com.rumosoft.marvelapi.data.network.ComicsResult
65
import com.rumosoft.marvelapi.data.network.apimodels.ComicDto
76
import com.rumosoft.marvelapi.data.network.apimodels.PaginationInfo
87
import javax.inject.Inject
98

109
class FakeComicsNetwork @Inject constructor(): ComicsNetwork {
11-
override suspend fun searchComics(
10+
override suspend fun getComics(
1211
offset: Int,
1312
limit: Int,
14-
titleStartsWith: String
1513
): Result<ComicsResult> {
1614
val comicsResult = ComicsResult(
1715
paginationInfo = PaginationInfo(
1816
current = 0,
1917
total = 0,
2018
),
21-
comics = (offset..offset + CHARACTERS_SEARCH_LIMIT).map {
19+
comics = (offset..offset + limit).map {
2220
ComicDto(
2321
id = it,
2422
title = "comic $it",

feature-characters/src/main/java/com/rumosoft/characters/data/repository/SearchRepositoryImpl.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,28 @@ package com.rumosoft.characters.data.repository
22

33
import com.rumosoft.characters.data.mappers.toHero
44
import com.rumosoft.characters.domain.model.Character
5-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
5+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
66
import com.rumosoft.marvelapi.data.network.CallInProgressException
77
import com.rumosoft.marvelapi.data.network.CharactersNetwork
88
import timber.log.Timber
99
import javax.inject.Inject
1010

11-
const val CHARACTERS_SEARCH_LIMIT = 20
11+
const val CHARACTERS_LIMIT = 20
1212

13-
class SearchRepositoryImpl @Inject constructor(
13+
class CharactersRepositoryImpl @Inject constructor(
1414
private val network: CharactersNetwork,
15-
) : SearchRepository {
15+
) : CharactersRepository {
1616
private var isRequestInProgress = false
1717

18-
override suspend fun performSearch(
19-
nameStartsWith: String,
18+
override suspend fun getCharacters(
2019
page: Int,
2120
): Result<List<Character>> {
2221
if (isRequestInProgress) {
2322
Timber.d("Request is in progress")
2423
return Result.failure(CallInProgressException("Request is in progress"))
2524
}
26-
Timber.d("Performing Network Search")
27-
val networkResult = performNetworkSearch(nameStartsWith, page)
25+
Timber.d("Fetching characters")
26+
val networkResult = performNetworkFetch(page)
2827
if (networkResult.isSuccess) {
2928
Timber.d("Returned results")
3029
}
@@ -44,13 +43,12 @@ class SearchRepositoryImpl @Inject constructor(
4443
return network.getComicThumbnail(comicId)
4544
}
4645

47-
private suspend fun performNetworkSearch(
48-
nameStartsWith: String,
46+
private suspend fun performNetworkFetch(
4947
page: Int,
5048
): Result<List<Character>> {
5149
isRequestInProgress = true
52-
val offset = (page - 1) * CHARACTERS_SEARCH_LIMIT
53-
val networkResult = network.searchHeroes(offset, CHARACTERS_SEARCH_LIMIT, nameStartsWith)
50+
val offset = (page - 1) * CHARACTERS_LIMIT
51+
val networkResult = network.getHeroes(offset, CHARACTERS_LIMIT)
5452
isRequestInProgress = false
5553
return networkResult.map { result ->
5654
result.characters?.map { it.toHero() } ?: emptyList()
Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package com.rumosoft.characters.domain.model
22

3-
import android.net.Uri
4-
import android.os.Bundle
53
import android.os.Parcelable
64
import androidx.annotation.Keep
7-
import androidx.navigation.NavType
8-
import com.rumosoft.marvelapi.infrastructure.extensions.parcelable
95
import kotlinx.parcelize.Parcelize
106
import kotlinx.serialization.Serializable
11-
import kotlinx.serialization.json.Json
127

138
@Keep
149
@Parcelize
@@ -30,16 +25,3 @@ data class Link(
3025
val url: String,
3126
) : Parcelable
3227

33-
val CharacterNavType = object : NavType<Character>(isNullableAllowed = false) {
34-
override fun put(bundle: Bundle, key: String, value: Character) {
35-
bundle.putParcelable(key, value)
36-
}
37-
38-
override fun get(bundle: Bundle, key: String): Character? {
39-
return bundle.parcelable(key) as Character?
40-
}
41-
42-
override fun parseValue(value: String): Character {
43-
return Json.decodeFromString(Uri.decode(value))
44-
}
45-
}

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/GetCharacterDetailsUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.rumosoft.characters.domain.usecase
22

33
import com.rumosoft.characters.domain.model.Character
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import javax.inject.Inject
66

77
class GetCharacterDetailsUseCase @Inject constructor(
8-
private val repository: SearchRepository,
8+
private val repository: CharactersRepository,
99
) {
1010
suspend operator fun invoke(
1111
characterId: Long,

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/GetComicThumbnailUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.rumosoft.characters.domain.usecase
22

3-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
3+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
44
import javax.inject.Inject
55

66
class GetComicThumbnailUseCase @Inject constructor(
7-
private val repository: SearchRepository,
7+
private val repository: CharactersRepository,
88
) {
99
suspend operator fun invoke(comicId: Int): Result<String> =
1010
repository.getThumbnail(comicId)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.rumosoft.characters.domain.usecase
22

33
import com.rumosoft.characters.domain.model.Character
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import javax.inject.Inject
66

7-
class SearchUseCase @Inject constructor(
8-
private val repository: SearchRepository,
7+
class GetCharactersUseCase @Inject constructor(
8+
private val repository: CharactersRepository,
99
) {
10-
suspend operator fun invoke(nameStart: String, page: Int): Result<List<Character>> =
11-
repository.performSearch(nameStart, page)
10+
suspend operator fun invoke(page: Int): Result<List<Character>> =
11+
repository.getCharacters(page)
1212
}

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/interfaces/SearchRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package com.rumosoft.characters.domain.usecase.interfaces
22

33
import com.rumosoft.characters.domain.model.Character
44

5-
interface SearchRepository {
6-
suspend fun performSearch(nameStartsWith: String, page: Int): Result<List<Character>>
5+
interface CharactersRepository {
6+
suspend fun getCharacters(page: Int): Result<List<Character>>
77
suspend fun getCharacterDetails(heroId: Long): Result<Character?>
88
suspend fun getThumbnail(comicId: Int): Result<String>
99
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.rumosoft.characters.infrastructure.di
22

3-
import com.rumosoft.characters.data.repository.SearchRepositoryImpl
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
3+
import com.rumosoft.characters.data.repository.CharactersRepositoryImpl
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import dagger.Binds
66
import dagger.Module
77
import dagger.hilt.InstallIn
@@ -12,6 +12,6 @@ import dagger.hilt.components.SingletonComponent
1212
abstract class CharactersRepositoryModule {
1313
@Binds
1414
abstract fun bindCharacterRepository(
15-
searchRepository: SearchRepositoryImpl,
16-
): SearchRepository
15+
charactersRepository: CharactersRepositoryImpl,
16+
): CharactersRepository
1717
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.rumosoft.characters.presentation.navigation
2+
3+
import android.net.Uri
4+
import android.os.Bundle
5+
import androidx.navigation.NavType
6+
import com.rumosoft.characters.domain.model.Character
7+
import com.rumosoft.marvelapi.infrastructure.extensions.parcelable
8+
import kotlinx.serialization.json.Json
9+
10+
val CharacterNavType = object : NavType<Character>(isNullableAllowed = false) {
11+
override fun put(bundle: Bundle, key: String, value: Character) {
12+
bundle.putParcelable(key, value)
13+
}
14+
15+
override fun get(bundle: Bundle, key: String): Character? {
16+
return bundle.parcelable(key) as Character?
17+
}
18+
19+
override fun parseValue(value: String): Character {
20+
return Json.decodeFromString(Uri.decode(value))
21+
}
22+
}

0 commit comments

Comments
 (0)