From 4cbaf70e6bccfa0adf0f9d7314c8ed7bcfcaaec6 Mon Sep 17 00:00:00 2001 From: aveek Date: Sun, 19 Jun 2022 19:18:05 +0800 Subject: [PATCH] Product Integration - Init --- .../minimb/feature/login/ui/LoginActivity.kt | 2 +- .../{ => utilities}/LoginActivityHandler.kt | 2 +- .../src/main/res/layout/activity_login.xml | 2 +- .../products/api/ProductDataService.kt | 14 ++++++++ .../products/data/ProductDataSource.kt | 36 +++++++++++++++++++ .../products/data/ProductRepository.kt | 16 +++++++++ .../feature/products/model/AccountResponse.kt | 14 ++++++++ .../products/model/AllProductsResponse.kt | 14 ++++++++ .../products/model/ProductDetailsResponse.kt | 8 +++++ 9 files changed, 105 insertions(+), 3 deletions(-) rename feature/login/src/main/java/com/moneybox/minimb/feature/login/{ => utilities}/LoginActivityHandler.kt (96%) create mode 100644 feature/products/src/main/java/com/moneybox/minimb/feature/products/api/ProductDataService.kt create mode 100644 feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductDataSource.kt create mode 100644 feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductRepository.kt create mode 100644 feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AccountResponse.kt create mode 100644 feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AllProductsResponse.kt create mode 100644 feature/products/src/main/java/com/moneybox/minimb/feature/products/model/ProductDetailsResponse.kt diff --git a/feature/login/src/main/java/com/moneybox/minimb/feature/login/ui/LoginActivity.kt b/feature/login/src/main/java/com/moneybox/minimb/feature/login/ui/LoginActivity.kt index 91c5fd6..46e7566 100644 --- a/feature/login/src/main/java/com/moneybox/minimb/feature/login/ui/LoginActivity.kt +++ b/feature/login/src/main/java/com/moneybox/minimb/feature/login/ui/LoginActivity.kt @@ -8,7 +8,7 @@ import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Observer import com.google.android.material.snackbar.Snackbar -import com.moneybox.minimb.feature.login.LoginActivityHandler +import com.moneybox.minimb.feature.login.utilities.LoginActivityHandler import com.moneybox.minimb.feature.login.R import com.moneybox.minimb.feature.login.databinding.ActivityLoginBinding import com.moneybox.minimb.feature.login.utilities.Utils.isNetworkAvailable diff --git a/feature/login/src/main/java/com/moneybox/minimb/feature/login/LoginActivityHandler.kt b/feature/login/src/main/java/com/moneybox/minimb/feature/login/utilities/LoginActivityHandler.kt similarity index 96% rename from feature/login/src/main/java/com/moneybox/minimb/feature/login/LoginActivityHandler.kt rename to feature/login/src/main/java/com/moneybox/minimb/feature/login/utilities/LoginActivityHandler.kt index e090418..59531e3 100644 --- a/feature/login/src/main/java/com/moneybox/minimb/feature/login/LoginActivityHandler.kt +++ b/feature/login/src/main/java/com/moneybox/minimb/feature/login/utilities/LoginActivityHandler.kt @@ -1,4 +1,4 @@ -package com.moneybox.minimb.feature.login +package com.moneybox.minimb.feature.login.utilities import android.text.TextUtils import android.text.Editable diff --git a/feature/login/src/main/res/layout/activity_login.xml b/feature/login/src/main/res/layout/activity_login.xml index cf8f869..c78f4dc 100644 --- a/feature/login/src/main/res/layout/activity_login.xml +++ b/feature/login/src/main/res/layout/activity_login.xml @@ -7,7 +7,7 @@ + type="com.moneybox.minimb.feature.login.utilities.LoginActivityHandler" /> ) : Response +} \ No newline at end of file diff --git a/feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductDataSource.kt b/feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductDataSource.kt new file mode 100644 index 0000000..a69f325 --- /dev/null +++ b/feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductDataSource.kt @@ -0,0 +1,36 @@ +package com.moneybox.minimb.feature.products.data + +import com.google.gson.Gson +import com.moneybox.minimb.feature.products.api.ProductDataService +import com.moneybox.minimb.feature.products.model.AllProductsResponse +import com.moneybox.minimb.network.ApiResponseResult +import com.moneybox.minimb.network.ErrorResponseRemote +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import javax.inject.Inject + +class ProductDataSource @Inject constructor(private val service : ProductDataService) { + suspend fun login(userMap: HashMap): Flow> { + return flow { + emit(ApiResponseResult.loading()) + val result = service.loginRequest(userMap) + if (result.isSuccessful) { + emit(ApiResponseResult.success(data = result.body())) + } else { + val errorResponseRemote: ErrorResponseRemote = + Gson().fromJson( + result.errorBody()?.charStream(), + ErrorResponseRemote::class.java + ) + errorResponseRemote?.let { + it.message?.let { msg -> + emit(ApiResponseResult.error(msg, result.code().toString())) + } + } + } + } + } + fun logout(){ + + } +} \ No newline at end of file diff --git a/feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductRepository.kt b/feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductRepository.kt new file mode 100644 index 0000000..fbd6d26 --- /dev/null +++ b/feature/products/src/main/java/com/moneybox/minimb/feature/products/data/ProductRepository.kt @@ -0,0 +1,16 @@ +package com.moneybox.minimb.feature.products.data + +import com.moneybox.minimb.feature.products.model.AllProductsResponse +import com.moneybox.minimb.network.ApiResponseResult +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class ProductRepository @Inject constructor(private val loginDataSource: ProductDataSource) { + suspend fun login(userMap : HashMap): Flow> { + return loginDataSource.login(userMap) + } + fun logout() { +// user = null + loginDataSource.logout() + } +} \ No newline at end of file diff --git a/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AccountResponse.kt b/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AccountResponse.kt new file mode 100644 index 0000000..0745b65 --- /dev/null +++ b/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AccountResponse.kt @@ -0,0 +1,14 @@ +package com.moneybox.minimb.feature.products.model + +import com.google.gson.annotations.SerializedName + +data class ProductResponse( + @SerializedName("Id") + val id: Int, + @SerializedName("Product") + val product: ProductDetailsResponse, + @SerializedName("Moneybox") + val moneybox: Float, + @SerializedName("PlanValue") + val planValue: Float +) \ No newline at end of file diff --git a/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AllProductsResponse.kt b/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AllProductsResponse.kt new file mode 100644 index 0000000..7c41524 --- /dev/null +++ b/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/AllProductsResponse.kt @@ -0,0 +1,14 @@ +package com.moneybox.minimb.feature.products.model + +import com.google.gson.annotations.SerializedName + +data class AllProductsResponse( + @SerializedName("TotalPlanValue") + val totalPlanValue: Float, + @SerializedName("TotalEarnings") + val totalEarnings: Float, + @SerializedName("TotalEarningsAsPercentage") + val totalEarningsAsPercentage: Float? = null, + @SerializedName("ProductResponses") + val products: List, +) \ No newline at end of file diff --git a/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/ProductDetailsResponse.kt b/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/ProductDetailsResponse.kt new file mode 100644 index 0000000..7be5dcf --- /dev/null +++ b/feature/products/src/main/java/com/moneybox/minimb/feature/products/model/ProductDetailsResponse.kt @@ -0,0 +1,8 @@ +package com.moneybox.minimb.feature.products.model + +import com.google.gson.annotations.SerializedName + +data class ProductDetailsResponse( + @SerializedName("FriendlyName") + val friendlyName: String +) \ No newline at end of file