Skip to content

Commit dd8cbaa

Browse files
Merge pull request #22 from NicosNicolaou16/bug_fixes
Bug fixes
2 parents f3a1dd5 + 2053133 commit dd8cbaa

27 files changed

Lines changed: 146 additions & 68 deletions

File tree

README.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,36 @@ utilizes a variety of modern Android libraries and tools:
6868
- **Custom Components:** [PercentageWithAnimation](https://github.com/NicosNicolaou16/PercentagesWithAnimationCompose)
6969
for displaying Pokémon stats built by [@NicosNicolaou16](https://github.com/NicosNicolaou16).
7070

71+
## 🏗️ Architecture
72+
73+
The project follows **Clean Architecture** principles combined with **MVVM (Model-View-ViewModel)** and **Unidirectional Data Flow (UDF)**. This ensures a clean separation of concerns, making the codebase scalable, maintainable, and testable.
74+
75+
### Project Structure
76+
77+
```
78+
├── data/
79+
│ ├── di/ # Hilt Modules
80+
│ ├── network/ # Retrofit DTOs and API Service
81+
│ ├── room_database/ # Room Entities and DAOs
82+
│ ├── repository_impl/ # Repository Implementations
83+
│ └── mappers/ # Data transformation logic
84+
├── domain/
85+
│ └── repositories/ # Repository Interfaces
86+
├── presentation/
87+
│ ├── navigation/ # Navigation 3 setup and Navigator
88+
│ ├── pokemon_list/ # List feature (Screen, ViewModel, State)
89+
│ └── pokemon_details/ # Detail feature (Screen, ViewModel, State)
90+
├── ui/
91+
│ └── theme/ # Compose Theme (Color, Type, etc.)
92+
└── utils/ # Extension functions and generic classes
93+
```
94+
7195
## 🔧 Versioning
7296

7397
- **Target SDK:** **36**
7498
- **Minimum SDK:** **29**
7599
- **Kotlin Version:** **2.3.21**
76-
- **Gradle Version:** **9.2.0**
100+
- **Gradle Version:** **9.2.1**
77101

78102
## 📚 APIs & References
79103

app/proguard-rules.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#-keep class com.google.gson.stream.** { *; }
3434

3535
# Application classes that will be serialized/deserialized over Gson
36-
-keep class com.nicos.pokedex_compose.domain.pokemon_response_model.PokemonResponse.** { <fields>; }
36+
-keep class com.nicos.pokedex_compose.data.network.pokemon_response_model.PokemonResponse.** { <fields>; }
3737
-keep class com.nicos.pokedex_compose.data.room_database.entities.PokemonInfoEntity.** { <fields>; }
3838

3939
# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,

app/src/main/java/com/nicos/pokedex_compose/domain/di/handing_error/HandlingErrorModule.kt renamed to app/src/main/java/com/nicos/pokedex_compose/data/di/handing_error/HandlingErrorModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.nicos.pokedex_compose.domain.di.handing_error
1+
package com.nicos.pokedex_compose.data.di.handing_error
22

33
import android.content.Context
44
import com.nicos.pokedex_compose.utils.generic_classes.HandlingError

app/src/main/java/com/nicos/pokedex_compose/domain/di/network/NetworkModules.kt renamed to app/src/main/java/com/nicos/pokedex_compose/data/di/network/NetworkModules.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.nicos.pokedex_compose.domain.di.network
1+
package com.nicos.pokedex_compose.data.di.network
22

3-
import com.nicos.pokedex_compose.domain.network.init_network.MyNetworkManager
3+
import com.nicos.pokedex_compose.data.network.init_network.MyNetworkManager
44
import dagger.Module
55
import dagger.Provides
66
import dagger.hilt.InstallIn
@@ -12,7 +12,6 @@ import javax.inject.Singleton
1212
@InstallIn(SingletonComponent::class)
1313
object NetworkModules {
1414

15-
1615
@Provides
1716
@Singleton
1817
fun requestBuilder(): Retrofit = MyNetworkManager.initNetworkManager()

app/src/main/java/com/nicos/pokedex_compose/domain/di/network/services/PokemonModule.kt renamed to app/src/main/java/com/nicos/pokedex_compose/data/di/network/services/PokemonModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.nicos.pokedex_compose.domain.di.network.services
1+
package com.nicos.pokedex_compose.data.di.network.services
22

3-
import com.nicos.pokedex_compose.domain.network.PokemonService
3+
import com.nicos.pokedex_compose.data.network.PokemonService
44
import dagger.Module
55
import dagger.Provides
66
import dagger.hilt.InstallIn
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.nicos.pokedex_compose.data.di.repository_module
2+
3+
import com.nicos.pokedex_compose.data.network.PokemonService
4+
import com.nicos.pokedex_compose.data.repository_impl.PokemonDetailsRepositoryImpl
5+
import com.nicos.pokedex_compose.data.repository_impl.PokemonListRepositoryImpl
6+
import com.nicos.pokedex_compose.data.room_database.init_database.MyRoomDatabase
7+
import com.nicos.pokedex_compose.domain.repositories.PokemonDetailsRepository
8+
import com.nicos.pokedex_compose.domain.repositories.PokemonListRepository
9+
import com.nicos.pokedex_compose.utils.generic_classes.HandlingError
10+
import dagger.Module
11+
import dagger.Provides
12+
import dagger.hilt.InstallIn
13+
import dagger.hilt.android.components.ViewModelComponent
14+
15+
@Module
16+
@InstallIn(ViewModelComponent::class)
17+
object RepositoriesModule {
18+
19+
@Provides
20+
fun getPokemonListRepository(
21+
myRoomDatabase: MyRoomDatabase,
22+
pokemonService: PokemonService,
23+
handlingError: HandlingError
24+
): PokemonListRepository {
25+
return PokemonListRepositoryImpl(
26+
myRoomDatabase,
27+
pokemonService,
28+
handlingError
29+
)
30+
}
31+
32+
@Provides
33+
fun getPokemonDetailsRepository(
34+
myRoomDatabase: MyRoomDatabase,
35+
pokemonService: PokemonService,
36+
handlingError: HandlingError
37+
): PokemonDetailsRepository {
38+
return PokemonDetailsRepositoryImpl(
39+
myRoomDatabase,
40+
pokemonService,
41+
handlingError
42+
)
43+
}
44+
}

app/src/main/java/com/nicos/pokedex_compose/data/mappers/PokemonDetailsMapper.kt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package com.nicos.pokedex_compose.data.mappers
22

33
import com.nicos.pokedex_compose.data.room_database.entities.PokemonDetailsEntity
44
import com.nicos.pokedex_compose.data.room_database.entities.PokemonDetailsWithStatsEntity
5+
import com.nicos.pokedex_compose.data.room_database.entities.StatsEntity
56
import com.nicos.pokedex_compose.presentation.pokemon_details_screen.models.PokemonDetailsUI
7+
import com.nicos.pokedex_compose.presentation.pokemon_details_screen.models.StatsUi
68

79
fun PokemonDetailsWithStatsEntity.toPokemonDetailsUi(): PokemonDetailsUI {
810
return PokemonDetailsUI(
911
name = this.pokemonDetailsEntity.name,
10-
stats = this.statsEntityList.toMutableList(),
12+
stats = this.statsEntityList.map { it.toStatsUi() }.toMutableList(),
1113
weight = this.pokemonDetailsEntity.weight ?: 0,
1214
)
1315
}
@@ -18,6 +20,25 @@ fun PokemonDetailsUI.toPokemonDetailsEntity(): PokemonDetailsWithStatsEntity {
1820
name = this.name,
1921
weight = this.weight
2022
),
21-
statsEntityList = this.stats
23+
statsEntityList = this.stats.map {
24+
it.toStatsEntity()
25+
}
26+
)
27+
}
28+
29+
fun StatsEntity.toStatsUi(): StatsUi {
30+
return StatsUi(
31+
baseStat = this.baseStat,
32+
statName = this.statName,
33+
pokemonName = this.pokemonName,
34+
)
35+
}
36+
37+
38+
fun StatsUi.toStatsEntity(): StatsEntity {
39+
return StatsEntity(
40+
baseStat = this.baseStat,
41+
statName = this.statName,
42+
pokemonName = this.pokemonName,
2243
)
2344
}

app/src/main/java/com/nicos/pokedex_compose/domain/network/PokemonService.kt renamed to app/src/main/java/com/nicos/pokedex_compose/data/network/PokemonService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.nicos.pokedex_compose.domain.network
1+
package com.nicos.pokedex_compose.data.network
22

3-
import com.nicos.pokedex_compose.domain.pokemon_response_model.PokemonResponse
4-
import com.nicos.pokedex_compose.domain.dto.PokemonDetailsDto
3+
import com.nicos.pokedex_compose.data.network.pokemon_response_model.PokemonResponse
4+
import com.nicos.pokedex_compose.data.network.dto.PokemonDetailsDto
55
import retrofit2.http.GET
66
import retrofit2.http.Url
77

app/src/main/java/com/nicos/pokedex_compose/domain/dto/PokemonDetailsDto.kt renamed to app/src/main/java/com/nicos/pokedex_compose/data/network/dto/PokemonDetailsDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.nicos.pokedex_compose.domain.dto
1+
package com.nicos.pokedex_compose.data.network.dto
22

33
import com.google.gson.annotations.SerializedName
44

app/src/main/java/com/nicos/pokedex_compose/domain/dto/PokemonDto.kt renamed to app/src/main/java/com/nicos/pokedex_compose/data/network/dto/PokemonDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.nicos.pokedex_compose.domain.dto
1+
package com.nicos.pokedex_compose.data.network.dto
22

33
data class PokemonDto(
44
val name: String,

0 commit comments

Comments
 (0)