From 5c915eb87bfc52aa408fe7fa1b18dea9a7a16254 Mon Sep 17 00:00:00 2001 From: anangkur Date: Thu, 12 Sep 2024 17:10:57 +0700 Subject: [PATCH] fix: separate data access to drivers module --- README.md | 32 ++++++++++------ data/local/build.gradle | 5 +-- .../com/anangkur/wallpaper/local/Const.kt | 7 ---- .../wallpaper/local/LocalRepository.kt | 18 ++++----- .../anangkur/wallpaper/local/mapper/Mapper.kt | 6 --- .../wallpaper/local/mapper/Wallpaper.kt | 22 +++++++++++ data/remote/build.gradle | 5 +-- .../wallpaper/remote/RemoteRepository.kt | 11 ++++-- .../wallpaper/remote/mapper/Collection.kt | 11 ++++++ .../wallpaper/remote/mapper/Mapper.kt | 5 --- .../wallpaper/remote/mapper/Wallpaper.kt | 13 +++++++ driver/config/.gitignore | 1 + driver/config/build.gradle.kts | 37 +++++++++++++++++++ driver/config/consumer-rules.pro | 0 driver/config/proguard-rules.pro | 21 +++++++++++ driver/config/src/main/AndroidManifest.xml | 4 ++ .../config/SharedPreferencesConfig.kt | 26 +++++++++++++ driver/localdb/.gitignore | 1 + driver/localdb/build.gradle | 14 +++++++ driver/localdb/consumer-rules.pro | 0 driver/localdb/proguard-rules.pro | 21 +++++++++++ driver/localdb/src/main/AndroidManifest.xml | 5 +++ .../com/anangkur/wallpaper/localdb/Const.kt | 5 +++ .../anangkur/wallpaper/localdb}/dao/AppDao.kt | 4 +- .../wallpaper/localdb}/db/AppDatabase.kt | 8 ++-- .../localdb}/model/DatabaseEntity.kt | 21 +---------- driver/rest/.gitignore | 1 + driver/rest/build.gradle | 9 +++++ driver/rest/consumer-rules.pro | 0 driver/rest/proguard-rules.pro | 21 +++++++++++ driver/rest/src/main/AndroidManifest.xml | 4 ++ .../anangkur/wallpaper/rest/di/Injector.kt | 26 +++++++++++++ .../rest}/model/base/BasePagination.kt | 2 +- .../rest}/model/base/BaseResponse.kt | 2 +- .../model/unsplash/CollectionResponse.kt | 11 +----- .../rest}/model/unsplash/CoverPhoto.kt | 2 +- .../wallpaper/rest}/model/unsplash/Links.kt | 2 +- .../rest}/model/unsplash/PreviewPhotos.kt | 2 +- .../rest}/model/unsplash/ProfileImage.kt | 2 +- .../rest}/model/unsplash/SearchResult.kt | 2 +- .../wallpaper/rest}/model/unsplash/Urls.kt | 2 +- .../wallpaper/rest}/model/unsplash/User.kt | 2 +- .../rest}/model/unsplash/UserLinks.kt | 2 +- .../rest}/model/unsplash/WallpaperResponse.kt | 12 +----- .../rest/service}/UnsplashService.kt | 8 ++-- .../anangkur/wallpaper/injection/Injector.kt | 32 +--------------- settings.gradle | 3 ++ 47 files changed, 309 insertions(+), 141 deletions(-) delete mode 100644 data/local/src/main/java/com/anangkur/wallpaper/local/Const.kt delete mode 100644 data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Mapper.kt create mode 100644 data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Wallpaper.kt create mode 100644 data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Collection.kt delete mode 100644 data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Mapper.kt create mode 100644 data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Wallpaper.kt create mode 100644 driver/config/.gitignore create mode 100644 driver/config/build.gradle.kts create mode 100644 driver/config/consumer-rules.pro create mode 100644 driver/config/proguard-rules.pro create mode 100644 driver/config/src/main/AndroidManifest.xml create mode 100644 driver/config/src/main/java/com/anangkur/wallpaper/config/SharedPreferencesConfig.kt create mode 100644 driver/localdb/.gitignore create mode 100644 driver/localdb/build.gradle create mode 100644 driver/localdb/consumer-rules.pro create mode 100644 driver/localdb/proguard-rules.pro create mode 100644 driver/localdb/src/main/AndroidManifest.xml create mode 100644 driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/Const.kt rename {data/local/src/main/java/com/anangkur/wallpaper/local => driver/localdb/src/main/java/com/anangkur/wallpaper/localdb}/dao/AppDao.kt (88%) rename {data/local/src/main/java/com/anangkur/wallpaper/local => driver/localdb/src/main/java/com/anangkur/wallpaper/localdb}/db/AppDatabase.kt (83%) rename {data/local/src/main/java/com/anangkur/wallpaper/local => driver/localdb/src/main/java/com/anangkur/wallpaper/localdb}/model/DatabaseEntity.kt (51%) create mode 100644 driver/rest/.gitignore create mode 100644 driver/rest/build.gradle create mode 100644 driver/rest/consumer-rules.pro create mode 100644 driver/rest/proguard-rules.pro create mode 100644 driver/rest/src/main/AndroidManifest.xml create mode 100644 driver/rest/src/main/java/com/anangkur/wallpaper/rest/di/Injector.kt rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/base/BasePagination.kt (94%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/base/BaseResponse.kt (79%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/CollectionResponse.kt (73%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/CoverPhoto.kt (92%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/Links.kt (85%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/PreviewPhotos.kt (87%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/ProfileImage.kt (81%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/SearchResult.kt (83%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/Urls.kt (86%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/User.kt (94%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/UserLinks.kt (86%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote => driver/rest/src/main/java/com/anangkur/wallpaper/rest}/model/unsplash/WallpaperResponse.kt (69%) rename {data/remote/src/main/java/com/anangkur/wallpaper/remote/services => driver/rest/src/main/java/com/anangkur/wallpaper/rest/service}/UnsplashService.kt (77%) diff --git a/README.md b/README.md index e02f00d..4feee34 100644 --- a/README.md +++ b/README.md @@ -9,28 +9,25 @@ graph LR subgraph :data - :data:local["local"] :data:remote["remote"] + :data:local["local"] + end + subgraph :driver + :driver:rest["rest"] + :driver:localdb["localdb"] + :driver:config["config"] end subgraph :features - :features:preview["preview"] - :features:saved["saved"] :features:home["home"] :features:search["search"] + :features:saved["saved"] + :features:preview["preview"] :features:collection["collection"] end - :features:preview --> :app - :data:local --> :data - :features:saved --> :app - :data --> :domain :data:remote --> :data + :data:remote --> :driver:rest :features:home --> :app - :injection --> :data - :injection --> :domain - :injection --> :data:local - :injection --> :data:remote :features:search --> :app - :features:collection --> :app :app --> :navigator :app --> :injection :app --> :domain @@ -39,6 +36,17 @@ graph LR :app --> :features:saved :app --> :features:preview :app --> :features:collection + :features:preview --> :app + :data:local --> :data + :data:local --> :driver:localdb + :data:local --> :driver:config + :features:saved --> :app + :data --> :domain + :injection --> :data + :injection --> :domain + :injection --> :data:local + :injection --> :data:remote + :features:collection --> :app ``` ## Built With * [Kotlin](https://kotlinlang.org/) diff --git a/data/local/build.gradle b/data/local/build.gradle index 3d886b0..1a9f027 100644 --- a/data/local/build.gradle +++ b/data/local/build.gradle @@ -1,6 +1,5 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' android{ kotlinOptions { @@ -10,7 +9,7 @@ android{ dependencies { implementation(project(':data')) - + implementation(project(':driver:localdb')) + implementation(project(':driver:config')) implementation Deps.androidxRoom - kapt Deps.androidxRoomCompiler } diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/Const.kt b/data/local/src/main/java/com/anangkur/wallpaper/local/Const.kt deleted file mode 100644 index 27c7a86..0000000 --- a/data/local/src/main/java/com/anangkur/wallpaper/local/Const.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.anangkur.wallpaper.local - -object Const { - const val PREF_NAME = "PREF_NAME" - const val PREF_CACHED_TIME = "PREF_CACHED_TIME" - const val DATABASE_NAME = "DATABASE_NAME" -} \ No newline at end of file diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/LocalRepository.kt b/data/local/src/main/java/com/anangkur/wallpaper/local/LocalRepository.kt index 3280867..499abdd 100644 --- a/data/local/src/main/java/com/anangkur/wallpaper/local/LocalRepository.kt +++ b/data/local/src/main/java/com/anangkur/wallpaper/local/LocalRepository.kt @@ -1,23 +1,23 @@ package com.anangkur.wallpaper.local import android.content.Context -import android.content.SharedPreferences +import com.anangkur.wallpaper.config.SharedPreferencesConfig import com.anangkur.wallpaper.data.repository.LocalRepository import com.anangkur.wallpaper.domain.model.Wallpaper -import com.anangkur.wallpaper.local.db.AppDatabase -import com.anangkur.wallpaper.local.model.toDatabaseEntity -import com.anangkur.wallpaper.local.model.toWallpaper +import com.anangkur.wallpaper.local.mapper.toDatabaseEntity +import com.anangkur.wallpaper.local.mapper.toWallpaper +import com.anangkur.wallpaper.localdb.db.AppDatabase class LocalRepository( - private val preferences: SharedPreferences, - private val appDatabase: AppDatabase + private val preferences: SharedPreferencesConfig, + private val appDatabase: AppDatabase, ): LocalRepository { companion object{ private var INSTANCE: LocalRepository? = null fun getInstance(context: Context) = INSTANCE ?: LocalRepository( - context.getSharedPreferences(Const.PREF_NAME, Context.MODE_PRIVATE), - AppDatabase.getDatabase(context) + SharedPreferencesConfig.getInstance(context), + AppDatabase.getDatabase(context), ) } @@ -53,6 +53,6 @@ class LocalRepository( } private fun getLastCacheUpdateTimeMillis(): Long { - return preferences.getLong(Const.PREF_CACHED_TIME, 0) + return preferences.loadCacheTime() } } \ No newline at end of file diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Mapper.kt b/data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Mapper.kt deleted file mode 100644 index 302301c..0000000 --- a/data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Mapper.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.anangkur.wallpaper.local.mapper - -interface Mapper { - fun mapFromCached(type: CACHED): T - fun mapToCached(type: T): CACHED -} \ No newline at end of file diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Wallpaper.kt b/data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Wallpaper.kt new file mode 100644 index 0000000..06766bb --- /dev/null +++ b/data/local/src/main/java/com/anangkur/wallpaper/local/mapper/Wallpaper.kt @@ -0,0 +1,22 @@ +package com.anangkur.wallpaper.local.mapper + +import com.anangkur.wallpaper.domain.model.Wallpaper +import com.anangkur.wallpaper.localdb.model.DatabaseEntity + +fun Wallpaper.toDatabaseEntity() = DatabaseEntity( + title = title, + creator = creator, + imageUrl = imageUrl, + id = id, + isSaved = isSaved, + thumbnailUrl = thumbnailUrl +) + +fun DatabaseEntity.toWallpaper() = Wallpaper( + id = id, + title = title, + imageUrl = imageUrl, + creator = creator, + isSaved = isSaved, + thumbnailUrl = thumbnailUrl +) \ No newline at end of file diff --git a/data/remote/build.gradle b/data/remote/build.gradle index e2ef662..e29ea96 100644 --- a/data/remote/build.gradle +++ b/data/remote/build.gradle @@ -4,10 +4,7 @@ apply plugin: 'kotlin' dependencies { implementation(project(':data')) + implementation(project(':driver:rest')) implementation Deps.toolsKotlinJdk8 - api Deps.retrofitConverterGson - api Deps.retrofit - api Deps.okhttp - api Deps.okhttpLoggingInterceptor } diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/RemoteRepository.kt b/data/remote/src/main/java/com/anangkur/wallpaper/remote/RemoteRepository.kt index 6d1b675..056561c 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/RemoteRepository.kt +++ b/data/remote/src/main/java/com/anangkur/wallpaper/remote/RemoteRepository.kt @@ -2,16 +2,19 @@ package com.anangkur.wallpaper.remote import com.anangkur.wallpaper.data.repository.RemoteRepository import com.anangkur.wallpaper.domain.model.Wallpaper -import com.anangkur.wallpaper.remote.model.unsplash.toCollection -import com.anangkur.wallpaper.remote.model.unsplash.toWallpaper -import com.anangkur.wallpaper.remote.services.UnsplashService +import com.anangkur.wallpaper.remote.mapper.toCollection +import com.anangkur.wallpaper.remote.mapper.toWallpaper +import com.anangkur.wallpaper.rest.di.provideRetrofitBuilder +import com.anangkur.wallpaper.rest.service.UnsplashService import com.anangkur.wallpaper.domain.model.Collection as ModelCollection class RemoteRepository(private val unsplashService: UnsplashService): RemoteRepository { companion object{ private var INSTANCE: RemoteRepository? = null - fun getInstance(unsplashService: UnsplashService) = INSTANCE ?: RemoteRepository(unsplashService) + fun getInstance(baseUrl: String) = INSTANCE ?: RemoteRepository( + provideRetrofitBuilder(baseUrl).create(UnsplashService::class.java) + ) } override suspend fun fetchWallpaper(clientId: String): List { diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Collection.kt b/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Collection.kt new file mode 100644 index 0000000..d17c436 --- /dev/null +++ b/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Collection.kt @@ -0,0 +1,11 @@ +package com.anangkur.wallpaper.remote.mapper + +import com.anangkur.wallpaper.domain.model.Collection +import com.anangkur.wallpaper.rest.model.unsplash.CollectionResponse + +fun CollectionResponse.toCollection() = Collection( + id = id.orEmpty(), + title = title.orEmpty(), + description = description.orEmpty(), + wallpapers = previewPhotos.map { it.urls.regular.orEmpty() } +) \ No newline at end of file diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Mapper.kt b/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Mapper.kt deleted file mode 100644 index 479feb6..0000000 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Mapper.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.anangkur.wallpaper.remote.mapper - -interface Mapper { - fun mapFromRemote(type: MODEL): T -} \ No newline at end of file diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Wallpaper.kt b/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Wallpaper.kt new file mode 100644 index 0000000..9ae2c96 --- /dev/null +++ b/data/remote/src/main/java/com/anangkur/wallpaper/remote/mapper/Wallpaper.kt @@ -0,0 +1,13 @@ +package com.anangkur.wallpaper.remote.mapper + +import com.anangkur.wallpaper.domain.model.Wallpaper +import com.anangkur.wallpaper.rest.model.unsplash.WallpaperResponse + +fun WallpaperResponse.toWallpaper() = Wallpaper( + id = id.orEmpty(), + creator = user?.name.orEmpty().ifEmpty { "-" }, + imageUrl = urls?.full.orEmpty(), + isSaved = false, + title = description.orEmpty().ifEmpty { altDescription.orEmpty().ifEmpty { "-" } }, + thumbnailUrl = urls?.regular.orEmpty() +) \ No newline at end of file diff --git a/driver/config/.gitignore b/driver/config/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/driver/config/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/driver/config/build.gradle.kts b/driver/config/build.gradle.kts new file mode 100644 index 0000000..4c00c78 --- /dev/null +++ b/driver/config/build.gradle.kts @@ -0,0 +1,37 @@ +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "com.anangkur.wallpaper.config" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + +} \ No newline at end of file diff --git a/driver/config/consumer-rules.pro b/driver/config/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/driver/config/proguard-rules.pro b/driver/config/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/driver/config/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/driver/config/src/main/AndroidManifest.xml b/driver/config/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/driver/config/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/driver/config/src/main/java/com/anangkur/wallpaper/config/SharedPreferencesConfig.kt b/driver/config/src/main/java/com/anangkur/wallpaper/config/SharedPreferencesConfig.kt new file mode 100644 index 0000000..e48133e --- /dev/null +++ b/driver/config/src/main/java/com/anangkur/wallpaper/config/SharedPreferencesConfig.kt @@ -0,0 +1,26 @@ +package com.anangkur.wallpaper.config + +import android.content.Context +import android.content.SharedPreferences + +class SharedPreferencesConfig(context: Context) { + + companion object { + private const val PREF_NAME = "PREF_NAME" + private const val PREF_CACHED_TIME = "PREF_CACHED_TIME" + private var INSTANCE: SharedPreferencesConfig? = null + fun getInstance(context: Context) = INSTANCE ?: SharedPreferencesConfig(context) + } + + private val instance: SharedPreferences by lazy { + context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) + } + + fun saveCacheTime(cacheTime: Long) { + instance.edit().putLong(PREF_CACHED_TIME, cacheTime).apply() + } + + fun loadCacheTime(): Long { + return instance.getLong(PREF_CACHED_TIME, 0) + } +} \ No newline at end of file diff --git a/driver/localdb/.gitignore b/driver/localdb/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/driver/localdb/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/driver/localdb/build.gradle b/driver/localdb/build.gradle new file mode 100644 index 0000000..2548fd1 --- /dev/null +++ b/driver/localdb/build.gradle @@ -0,0 +1,14 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' + +android{ + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } +} + +dependencies { + implementation Deps.androidxRoom + kapt Deps.androidxRoomCompiler +} \ No newline at end of file diff --git a/driver/localdb/consumer-rules.pro b/driver/localdb/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/driver/localdb/proguard-rules.pro b/driver/localdb/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/driver/localdb/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/driver/localdb/src/main/AndroidManifest.xml b/driver/localdb/src/main/AndroidManifest.xml new file mode 100644 index 0000000..443626f --- /dev/null +++ b/driver/localdb/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/Const.kt b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/Const.kt new file mode 100644 index 0000000..979eb30 --- /dev/null +++ b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/Const.kt @@ -0,0 +1,5 @@ +package com.anangkur.wallpaper.localdb + +object Const { + const val DATABASE_NAME = "DATABASE_NAME" +} \ No newline at end of file diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/dao/AppDao.kt b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/dao/AppDao.kt similarity index 88% rename from data/local/src/main/java/com/anangkur/wallpaper/local/dao/AppDao.kt rename to driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/dao/AppDao.kt index 3f7df2e..7a1feca 100644 --- a/data/local/src/main/java/com/anangkur/wallpaper/local/dao/AppDao.kt +++ b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/dao/AppDao.kt @@ -1,7 +1,7 @@ -package com.anangkur.wallpaper.local.dao +package com.anangkur.wallpaper.localdb.dao import androidx.room.* -import com.anangkur.wallpaper.local.model.DatabaseEntity +import com.anangkur.wallpaper.localdb.model.DatabaseEntity @Dao interface AppDao { diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/db/AppDatabase.kt b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/db/AppDatabase.kt similarity index 83% rename from data/local/src/main/java/com/anangkur/wallpaper/local/db/AppDatabase.kt rename to driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/db/AppDatabase.kt index 73cd847..19b0382 100644 --- a/data/local/src/main/java/com/anangkur/wallpaper/local/db/AppDatabase.kt +++ b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/db/AppDatabase.kt @@ -1,12 +1,12 @@ -package com.anangkur.wallpaper.local.db +package com.anangkur.wallpaper.localdb.db import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -import com.anangkur.wallpaper.local.dao.AppDao -import com.anangkur.wallpaper.local.Const -import com.anangkur.wallpaper.local.model.DatabaseEntity +import com.anangkur.wallpaper.localdb.dao.AppDao +import com.anangkur.wallpaper.localdb.Const +import com.anangkur.wallpaper.localdb.model.DatabaseEntity @Database(entities = [DatabaseEntity::class], version = 6) abstract class AppDatabase: RoomDatabase(){ diff --git a/data/local/src/main/java/com/anangkur/wallpaper/local/model/DatabaseEntity.kt b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/model/DatabaseEntity.kt similarity index 51% rename from data/local/src/main/java/com/anangkur/wallpaper/local/model/DatabaseEntity.kt rename to driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/model/DatabaseEntity.kt index dfcd4ba..0bb7418 100644 --- a/data/local/src/main/java/com/anangkur/wallpaper/local/model/DatabaseEntity.kt +++ b/driver/localdb/src/main/java/com/anangkur/wallpaper/localdb/model/DatabaseEntity.kt @@ -1,9 +1,8 @@ -package com.anangkur.wallpaper.local.model +package com.anangkur.wallpaper.localdb.model import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import com.anangkur.wallpaper.domain.model.Wallpaper @Entity data class DatabaseEntity( @@ -25,22 +24,4 @@ data class DatabaseEntity( @ColumnInfo(name = "thumbnailUrl") val thumbnailUrl: String -) - -fun Wallpaper.toDatabaseEntity() = DatabaseEntity( - title = title, - creator = creator, - imageUrl = imageUrl, - id = id, - isSaved = isSaved, - thumbnailUrl = thumbnailUrl -) - -fun DatabaseEntity.toWallpaper() = Wallpaper( - id = id, - title = title, - imageUrl = imageUrl, - creator = creator, - isSaved = isSaved, - thumbnailUrl = thumbnailUrl ) \ No newline at end of file diff --git a/driver/rest/.gitignore b/driver/rest/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/driver/rest/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/driver/rest/build.gradle b/driver/rest/build.gradle new file mode 100644 index 0000000..a459f7f --- /dev/null +++ b/driver/rest/build.gradle @@ -0,0 +1,9 @@ +apply plugin: 'java-library' +apply plugin: 'kotlin' + +dependencies { + api Deps.retrofitConverterGson + api Deps.retrofit + api Deps.okhttp + api Deps.okhttpLoggingInterceptor +} \ No newline at end of file diff --git a/driver/rest/consumer-rules.pro b/driver/rest/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/driver/rest/proguard-rules.pro b/driver/rest/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/driver/rest/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/driver/rest/src/main/AndroidManifest.xml b/driver/rest/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/driver/rest/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/driver/rest/src/main/java/com/anangkur/wallpaper/rest/di/Injector.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/di/Injector.kt new file mode 100644 index 0000000..2130144 --- /dev/null +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/di/Injector.kt @@ -0,0 +1,26 @@ +package com.anangkur.wallpaper.rest.di + +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit + +fun provideRetrofitBuilder(baseUrl: String): Retrofit = Retrofit.Builder() + .baseUrl(baseUrl) + .addConverterFactory(GsonConverterFactory.create()) + .client(provideOkHttpBuilder()) + .build() + +private fun provideOkHttpBuilder() = OkHttpClient.Builder() + .readTimeout(30, TimeUnit.SECONDS) + .connectTimeout(30, TimeUnit.SECONDS) + .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) + .addInterceptor { chain -> + val request = + chain.request() + .newBuilder() + .build() + chain.proceed(request) + } + .build() \ No newline at end of file diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/base/BasePagination.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/base/BasePagination.kt similarity index 94% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/base/BasePagination.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/base/BasePagination.kt index a721672..c4bbae8 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/base/BasePagination.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/base/BasePagination.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.base +package com.anangkur.wallpaper.rest.model.base import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/base/BaseResponse.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/base/BaseResponse.kt similarity index 79% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/base/BaseResponse.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/base/BaseResponse.kt index be61ff5..a5877f7 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/base/BaseResponse.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/base/BaseResponse.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.base +package com.anangkur.wallpaper.rest.model.base import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/CollectionResponse.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/CollectionResponse.kt similarity index 73% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/CollectionResponse.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/CollectionResponse.kt index edb7145..cef1e81 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/CollectionResponse.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/CollectionResponse.kt @@ -1,7 +1,5 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash - -import com.anangkur.wallpaper.domain.model.Collection import com.google.gson.annotations.SerializedName data class CollectionResponse( @@ -31,11 +29,4 @@ data class CollectionResponse( val user: User?, @SerializedName("preview_photos") val previewPhotos: List -) - -fun CollectionResponse.toCollection() = Collection( - id = id.orEmpty(), - title = title.orEmpty(), - description = description.orEmpty(), - wallpapers = previewPhotos.map { it.urls.regular.orEmpty() } ) \ No newline at end of file diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/CoverPhoto.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/CoverPhoto.kt similarity index 92% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/CoverPhoto.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/CoverPhoto.kt index 604f484..1d413af 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/CoverPhoto.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/CoverPhoto.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/Links.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/Links.kt similarity index 85% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/Links.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/Links.kt index 120584c..66ce2ce 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/Links.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/Links.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/PreviewPhotos.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/PreviewPhotos.kt similarity index 87% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/PreviewPhotos.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/PreviewPhotos.kt index 7a4b332..951024d 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/PreviewPhotos.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/PreviewPhotos.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/ProfileImage.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/ProfileImage.kt similarity index 81% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/ProfileImage.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/ProfileImage.kt index e17af26..52c5336 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/ProfileImage.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/ProfileImage.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/SearchResult.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/SearchResult.kt similarity index 83% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/SearchResult.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/SearchResult.kt index 795f7ce..a37d63b 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/SearchResult.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/SearchResult.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/Urls.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/Urls.kt similarity index 86% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/Urls.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/Urls.kt index ea39af1..1060c03 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/Urls.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/Urls.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/User.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/User.kt similarity index 94% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/User.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/User.kt index f7d55b0..7c04e4c 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/User.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/User.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/UserLinks.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/UserLinks.kt similarity index 86% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/UserLinks.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/UserLinks.kt index 7892d64..9fa4a77 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/UserLinks.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/UserLinks.kt @@ -1,4 +1,4 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash import com.google.gson.annotations.SerializedName diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/WallpaperResponse.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/WallpaperResponse.kt similarity index 69% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/WallpaperResponse.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/WallpaperResponse.kt index 0965836..e26b95c 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/model/unsplash/WallpaperResponse.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/model/unsplash/WallpaperResponse.kt @@ -1,6 +1,5 @@ -package com.anangkur.wallpaper.remote.model.unsplash +package com.anangkur.wallpaper.rest.model.unsplash -import com.anangkur.wallpaper.domain.model.Wallpaper import com.google.gson.annotations.SerializedName data class WallpaperResponse( @@ -34,13 +33,4 @@ data class WallpaperResponse( val user: User?, @SerializedName("width") val width: Int? -) - -fun WallpaperResponse.toWallpaper() = Wallpaper( - id = id.orEmpty(), - creator = user?.name.orEmpty().ifEmpty { "-" }, - imageUrl = urls?.full.orEmpty(), - isSaved = false, - title = description.orEmpty().ifEmpty { altDescription.orEmpty().ifEmpty { "-" } }, - thumbnailUrl = urls?.regular.orEmpty() ) \ No newline at end of file diff --git a/data/remote/src/main/java/com/anangkur/wallpaper/remote/services/UnsplashService.kt b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/service/UnsplashService.kt similarity index 77% rename from data/remote/src/main/java/com/anangkur/wallpaper/remote/services/UnsplashService.kt rename to driver/rest/src/main/java/com/anangkur/wallpaper/rest/service/UnsplashService.kt index 8e68e28..b353f9a 100644 --- a/data/remote/src/main/java/com/anangkur/wallpaper/remote/services/UnsplashService.kt +++ b/driver/rest/src/main/java/com/anangkur/wallpaper/rest/service/UnsplashService.kt @@ -1,8 +1,8 @@ -package com.anangkur.wallpaper.remote.services +package com.anangkur.wallpaper.rest.service -import com.anangkur.wallpaper.remote.model.unsplash.CollectionResponse -import com.anangkur.wallpaper.remote.model.unsplash.SearchResult -import com.anangkur.wallpaper.remote.model.unsplash.WallpaperResponse +import com.anangkur.wallpaper.rest.model.unsplash.CollectionResponse +import com.anangkur.wallpaper.rest.model.unsplash.SearchResult +import com.anangkur.wallpaper.rest.model.unsplash.WallpaperResponse import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query diff --git a/injection/src/main/java/com/anangkur/wallpaper/injection/Injector.kt b/injection/src/main/java/com/anangkur/wallpaper/injection/Injector.kt index 1745cd5..c5f55f8 100644 --- a/injection/src/main/java/com/anangkur/wallpaper/injection/Injector.kt +++ b/injection/src/main/java/com/anangkur/wallpaper/injection/Injector.kt @@ -4,12 +4,6 @@ import android.content.Context import com.anangkur.wallpaper.domain.repository.Repository import com.anangkur.wallpaper.local.LocalRepository import com.anangkur.wallpaper.remote.RemoteRepository -import com.anangkur.wallpaper.remote.services.UnsplashService -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import java.util.concurrent.TimeUnit import com.anangkur.wallpaper.data.Repository.Companion as RepositoryImpl class Injector( @@ -20,33 +14,11 @@ class Injector( val repository: Repository by lazy { RepositoryImpl.getInstance( localRepository = provideLocalRepository(context), - remoteRepository = provideRemoteRepository(provideUnsplashService(baseUrl)) + remoteRepository = provideRemoteRepository(baseUrl) ) } private fun provideLocalRepository(context: Context) = LocalRepository.getInstance(context) - private fun provideRemoteRepository(unsplashService: UnsplashService) = RemoteRepository.getInstance(unsplashService) - - private fun provideUnsplashService(baseUrl: String) = provideRetrofitBuilder(baseUrl) - .create(UnsplashService::class.java) - - private fun provideRetrofitBuilder(baseUrl: String) = Retrofit.Builder() - .baseUrl(baseUrl) - .addConverterFactory(GsonConverterFactory.create()) - .client(provideOkHttpBuilder()) - .build() - - private fun provideOkHttpBuilder() = OkHttpClient.Builder() - .readTimeout(30, TimeUnit.SECONDS) - .connectTimeout(30, TimeUnit.SECONDS) - .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) - .addInterceptor { chain -> - val request = - chain.request() - .newBuilder() - .build() - chain.proceed(request) - } - .build() + private fun provideRemoteRepository(baseUrl: String) = RemoteRepository.getInstance(baseUrl) } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 1cc3e9b..dd67a7f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,3 +11,6 @@ include ':data:local' include ':data:remote' include ':features:collection' include ':domain' +include ':driver:rest' +include ':driver:localdb' +include ':driver:config'