-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Issue #33: Save Characters from the service to the Database. - Initial setup for room library. - Added entity, DAO and implementation to get Characters from the database if they are already cached from the service. Signed-off-by: Diego Recalde <diego.recalde@globant.com>
- Loading branch information
Showing
33 changed files
with
248 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
data/src/main/java/com/architect/coders/mu8/data/DataApp.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.architect.coders.mu8.data | ||
|
||
import android.app.Application | ||
import androidx.room.Room | ||
import com.architect.coders.mu8.data.database.MU8Database | ||
|
||
open class DataApp : Application() { | ||
|
||
lateinit var database: MU8Database | ||
private set | ||
|
||
override fun onCreate() { | ||
super.onCreate() | ||
database = Room.databaseBuilder( | ||
this, | ||
MU8Database::class.java, | ||
"MU8-db" | ||
).build() | ||
} | ||
} |
8 changes: 4 additions & 4 deletions
8
.../local/categories/CategoriesRepository.kt → ...8/data/categories/CategoriesRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
data/src/main/java/com/architect/coders/mu8/data/characters/CharactersDAO.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.architect.coders.mu8.data.characters | ||
|
||
import androidx.room.Dao | ||
import androidx.room.Insert | ||
import androidx.room.OnConflictStrategy.IGNORE | ||
import androidx.room.Query | ||
|
||
@Dao | ||
interface CharactersDAO { | ||
|
||
@Query("SELECT * FROM CharactersEntity") | ||
fun getAllCharacters(): List<CharactersEntity> | ||
|
||
@Query("SELECT COUNT(id) FROM CharactersEntity") | ||
fun charactersCount(): Int | ||
|
||
@Insert(onConflict = IGNORE) | ||
fun insertCharacters(characters: List<CharactersEntity>) | ||
} |
16 changes: 16 additions & 0 deletions
16
data/src/main/java/com/architect/coders/mu8/data/characters/CharactersEntity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package com.architect.coders.mu8.data.characters | ||
|
||
import androidx.room.Entity | ||
import androidx.room.PrimaryKey | ||
import com.architect.coders.mu8.data.response.common.ThumbnailEntity | ||
import com.architect.coders.mu8.data.response.common.UrlsEntity | ||
import com.architect.codes.mu8.utils.EMPTY_STRING | ||
|
||
@Entity | ||
data class CharactersEntity( | ||
@PrimaryKey(autoGenerate = false) val id: Long = 0L, | ||
val name: String = EMPTY_STRING, | ||
val description: String = EMPTY_STRING, | ||
val thumbnail: ThumbnailEntity, | ||
val urls: List<UrlsEntity> | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 24 additions & 14 deletions
38
data/src/main/java/com/architect/coders/mu8/data/characters/CharactersRepositoryImpl.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,40 @@ | ||
package com.architect.coders.mu8.data.characters | ||
|
||
import com.architect.coders.mu8.data.service.MarvelServiceManager | ||
import com.architect.coders.mu8.data.DataApp | ||
import com.architect.coders.mu8.data.service.MarvelServiceManager.hashcode | ||
import com.architect.coders.mu8.data.service.MarvelServiceManager.service | ||
import com.architect.coders.mu8.data.utils.DEFAULT_OFFSET | ||
import com.architect.coders.mu8.data.utils.LIMIT | ||
import com.architect.coders.mu8.data.utils.MARVEL_PUBLIC_KEY | ||
import com.architect.coders.mu8.data.utils.TIME_STAMP | ||
import com.architect.codes.mu8.characters.Character | ||
import com.architect.codes.mu8.characters.CharactersRepository | ||
import com.architect.codes.mu8.common.Scope | ||
import kotlinx.coroutines.Dispatchers | ||
import kotlinx.coroutines.withContext | ||
|
||
class CharactersRepositoryImpl( | ||
private val mapper: CharactersMapper | ||
) : CharactersRepository, Scope by Scope.Implementation() { | ||
private val mapper: CharactersMapper, | ||
application: DataApp | ||
) : CharactersRepository { | ||
|
||
init { | ||
initScope() | ||
} | ||
private val database = application.database | ||
|
||
override suspend fun invoke(): List<Character> { | ||
val response = MarvelServiceManager.service.getAllCharacters(TIME_STAMP, MARVEL_PUBLIC_KEY, hashcode) | ||
override suspend fun invoke(): List<Character> = withContext(Dispatchers.IO) { | ||
with(database.getCharactersDao()) { | ||
if (charactersCount() <= 0) { | ||
val response = service.getAllCharacters( | ||
TIME_STAMP, | ||
MARVEL_PUBLIC_KEY, | ||
hashcode, | ||
DEFAULT_OFFSET, | ||
LIMIT | ||
) | ||
|
||
val characters = mutableListOf<Character>() | ||
if (response.isSuccessful) { | ||
response.body()?.data?.results?.forEach { | ||
characters.add(mapper.transform(it)) | ||
if (response.isSuccessful) { | ||
response.body()?.data?.results?.run { insertCharacters(this) } | ||
} | ||
} | ||
return@withContext getAllCharacters().map { mapper.transform(it) } | ||
} | ||
return characters | ||
} | ||
} |
13 changes: 0 additions & 13 deletions
13
data/src/main/java/com/architect/coders/mu8/data/characters/CharactersResponse.kt
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 0 additions & 1 deletion
1
data/src/main/java/com/architect/coders/mu8/data/comics/ComicsMapper.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 0 additions & 3 deletions
3
data/src/main/java/com/architect/coders/mu8/data/comics/model/ComicCharacterResponse.kt
This file was deleted.
Oops, something went wrong.
17 changes: 17 additions & 0 deletions
17
data/src/main/java/com/architect/coders/mu8/data/database/MU8Database.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.architect.coders.mu8.data.database | ||
|
||
import androidx.room.Database | ||
import androidx.room.RoomDatabase | ||
import androidx.room.TypeConverters | ||
import com.architect.coders.mu8.data.characters.CharactersDAO | ||
import com.architect.coders.mu8.data.characters.CharactersEntity | ||
import com.architect.coders.mu8.data.database.converter.ThumbnailTypeConverters | ||
import com.architect.coders.mu8.data.database.converter.UrlsTypeConverters | ||
|
||
private const val DATABASE_VERSION = 1 | ||
|
||
@Database(entities = [CharactersEntity::class], version = DATABASE_VERSION) | ||
@TypeConverters(UrlsTypeConverters::class, ThumbnailTypeConverters::class) | ||
abstract class MU8Database : RoomDatabase() { | ||
abstract fun getCharactersDao(): CharactersDAO | ||
} |
28 changes: 28 additions & 0 deletions
28
...src/main/java/com/architect/coders/mu8/data/database/converter/ThumbnailTypeConverters.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.architect.coders.mu8.data.database.converter | ||
|
||
import androidx.room.TypeConverter | ||
import com.architect.coders.mu8.data.response.common.ThumbnailEntity | ||
import com.google.gson.Gson | ||
import com.google.gson.reflect.TypeToken | ||
|
||
class ThumbnailTypeConverters { | ||
|
||
private val gson = Gson() | ||
|
||
@TypeConverter | ||
fun stringToThumbnail(data: String?): ThumbnailEntity { | ||
if (data == null) { | ||
return ThumbnailEntity() | ||
} | ||
val type = object : TypeToken<ThumbnailEntity>() {}.type | ||
return gson.fromJson(data, type) | ||
} | ||
|
||
@TypeConverter | ||
fun thumbnailToString(thumbnail: ThumbnailEntity?): String { | ||
if (thumbnail == null) { | ||
return gson.toJson(ThumbnailEntity()) | ||
} | ||
return gson.toJson(thumbnail) | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
data/src/main/java/com/architect/coders/mu8/data/database/converter/UrlsTypeConverters.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.architect.coders.mu8.data.database.converter | ||
|
||
import androidx.room.TypeConverter | ||
import com.architect.coders.mu8.data.response.common.UrlsEntity | ||
import com.google.gson.Gson | ||
import com.google.gson.reflect.TypeToken | ||
|
||
class UrlsTypeConverters { | ||
|
||
private val gson = Gson() | ||
|
||
@TypeConverter | ||
fun stringToUrls(data: String?): List<UrlsEntity> { | ||
if (data == null) { | ||
return emptyList() | ||
} | ||
val type = object : TypeToken<List<UrlsEntity>>() {}.type | ||
return gson.fromJson(data, type) | ||
} | ||
|
||
@TypeConverter | ||
fun urlsToString(urls: List<UrlsEntity>?): String { | ||
if (urls.isNullOrEmpty()) { | ||
gson.toJson(emptyList<UrlsEntity>()) | ||
} | ||
return gson.toJson(urls) | ||
} | ||
} |
8 changes: 4 additions & 4 deletions
8
data/src/main/java/com/architect/coders/mu8/data/mapper/common/UrlsMapper.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
data/src/main/java/com/architect/coders/mu8/data/response/common/ThumbnailEntity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.architect.coders.mu8.data.response.common | ||
|
||
import com.architect.codes.mu8.utils.EMPTY_STRING | ||
|
||
data class ThumbnailEntity(val path: String = EMPTY_STRING, val extension: String = EMPTY_STRING) |
5 changes: 0 additions & 5 deletions
5
data/src/main/java/com/architect/coders/mu8/data/response/common/ThumbnailResponse.kt
This file was deleted.
Oops, something went wrong.
3 changes: 3 additions & 0 deletions
3
data/src/main/java/com/architect/coders/mu8/data/response/common/UrlsEntity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
package com.architect.coders.mu8.data.response.common | ||
|
||
data class UrlsEntity(val type: String, val url: String) |
3 changes: 0 additions & 3 deletions
3
data/src/main/java/com/architect/coders/mu8/data/response/common/UrlsResponse.kt
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.