Bläddra i källkod

feat: 增加钱包请求

DoggyZhang 3 månader sedan
förälder
incheckning
04a07fe2e2

+ 4 - 0
app/src/main/java/com/adealink/weparty/module/wallet/IWalletService.kt

@@ -1,7 +1,11 @@
 package com.adealink.weparty.module.wallet
 
+import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.weparty.aab.IService
+import com.adealink.weparty.module.wallet.viewmodel.IWalletViewModel
 
 interface IWalletService : IService<IWalletService> {
 
+    fun getWalletViewModel(owner: ViewModelStoreOwner): IWalletViewModel?
+
 }

+ 11 - 0
app/src/main/java/com/adealink/weparty/module/wallet/WalletModule.kt

@@ -1,7 +1,9 @@
 package com.adealink.weparty.module.wallet
 
+import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.frame.aab.BaseDynamicModule
 import com.adealink.weparty.R
+import com.adealink.weparty.module.wallet.viewmodel.IWalletViewModel
 
 object WalletModule : BaseDynamicModule<IWalletService>(IWalletService::class),
     IWalletService {
@@ -22,9 +24,18 @@ object WalletModule : BaseDynamicModule<IWalletService>(IWalletService::class),
             override fun logout() {
 
             }
+
+            override fun getWalletViewModel(owner: ViewModelStoreOwner): IWalletViewModel? {
+                return null
+            }
         }
     }
 
+
+    override fun getWalletViewModel(owner: ViewModelStoreOwner): IWalletViewModel? {
+        return getService().getWalletViewModel(owner)
+    }
+
     override fun logout() {
         getService().logout()
     }

+ 6 - 0
app/src/main/java/com/adealink/weparty/module/wallet/data/WalletData.kt

@@ -0,0 +1,6 @@
+package com.adealink.weparty.module.wallet.data
+
+enum class Currency(val type: Int) {
+    COIN(0),
+    DIAMOND(1),
+}

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/wallet/viewmodel/IWalletViewModel.kt

@@ -1,4 +1,12 @@
 package com.adealink.weparty.module.wallet.viewmodel
 
+import androidx.lifecycle.LiveData
+
 interface IWalletViewModel {
+
+    val coinLD: LiveData<Long>
+    val diamondLD: LiveData<Long>
+
+    fun refreshWalletData()
+
 }

+ 1 - 0
module/profile/src/main/java/com/adealink/weparty/profile/me/MeFragment.kt

@@ -47,6 +47,7 @@ class MeFragment : BaseFragment(R.layout.fragment_me) {
         profileViewModel.pullUserInfoBy(ProfileModule.getMyUid(), false)
         // TODO: 刷新关注人数
         followViewModel
+
     }
 
     override fun observeViewModel() {

+ 28 - 16
module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeWalletComp.kt

@@ -1,48 +1,60 @@
 package com.adealink.weparty.profile.me.comp
 
 import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.ViewComponent
-import com.adealink.frame.mvvm.viewmodel.viewModels
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.module.wallet.WalletModule
+import com.adealink.weparty.module.wallet.data.Currency
 import com.adealink.weparty.profile.databinding.LayoutMeWalletBinding
-import com.adealink.weparty.profile.viewmodel.ProfileViewModel
-import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
 
 class MeWalletComp(
     lifecycleOwner: LifecycleOwner,
     val binding: LayoutMeWalletBinding
 ) : ViewComponent(lifecycleOwner) {
-
-    private val profileViewModel by viewModels<ProfileViewModel>(
-        ownerProducer = { viewModelStoreOwner },
-        factoryProducer = { ProfileViewModelFactory() }
-    )
+    private val walletViewModel by fastLazy { WalletModule.getWalletViewModel(requireActivity()) }
 
     override fun onCreate() {
         super.onCreate()
         initView()
         observeViewModel()
+    }
+
+    override fun onResume() {
+        super.onResume()
         loadData()
     }
 
     private fun initView() {
+        binding.clCoin.onClick {
+            goWallet(Currency.COIN)
+        }
+        binding.clDiamond.onClick {
+            goWallet(Currency.DIAMOND)
+        }
     }
 
     private fun observeViewModel() {
-        profileViewModel.userInfoLD.observe(viewLifecycleOwner) { user ->
-            updateHeader(user)
+        walletViewModel?.coinLD?.observe(viewLifecycleOwner) {
+
+        }
+        walletViewModel?.diamondLD?.observe(viewLifecycleOwner) {
+
         }
     }
 
     private fun loadData() {
-        updateHeader(ProfileModule.getMyUserInfo())
+        walletViewModel?.refreshWalletData()
     }
 
-    private fun updateHeader(userInfo: UserInfo?) {
-    }
+    private fun goWallet(currency: Currency) {
+        when (currency) {
+            Currency.COIN -> {
 
-    private fun goWallet() {
+            }
 
+            Currency.DIAMOND -> {
+            }
+        }
     }
 }

+ 9 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/WalletServiceImpl.kt

@@ -1,7 +1,12 @@
 package com.adealink.weparty.wallet
 
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.frame.spi.RegisterService
 import com.adealink.weparty.module.wallet.IWalletService
+import com.adealink.weparty.module.wallet.viewmodel.IWalletViewModel
+import com.adealink.weparty.wallet.viewmodel.WalletViewModel
+import com.adealink.weparty.wallet.viewmodel.WalletViewModelFactory
 
 @RegisterService(IWalletService::class)
 class WalletServiceImpl : IWalletService {
@@ -14,4 +19,8 @@ class WalletServiceImpl : IWalletService {
         return this
     }
 
+    override fun getWalletViewModel(owner: ViewModelStoreOwner): IWalletViewModel {
+        return ViewModelProvider(owner, WalletViewModelFactory())[WalletViewModel::class.java]
+    }
+
 }

+ 8 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/data/WalletData.kt

@@ -6,6 +6,14 @@ import com.google.gson.annotations.SerializedName
 import kotlinx.parcelize.Parcelize
 
 
+data class WalletRes(
+    @SerializedName("goldCoin") val coin: Long,
+    @SerializedName("totalGoldCoinConsume") val totalGoldCoinConsume: Long,
+
+    @SerializedName("diamond") val diamond: Long,
+    @SerializedName("totalDiamondConsume") val totalDiamondConsume: Long
+)
+
 enum class PayChannel(val value: String) {
     Google("default");
 

+ 9 - 1
module/wallet/src/main/java/com/adealink/weparty/wallet/datasource/remote/WalletHttpService.kt

@@ -1,6 +1,14 @@
 package com.adealink.weparty.wallet.datasource.remote
 
-interface WalletHttpService {
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.network.data.Res
+import com.adealink.weparty.wallet.data.WalletRes
+import retrofit2.http.Core
+import retrofit2.http.POST
 
+interface WalletHttpService {
 
+    @Core
+    @POST("user/my/wallet")
+    suspend fun pullWallet(): Rlt<Res<WalletRes>>
 }

+ 30 - 2
module/wallet/src/main/java/com/adealink/weparty/wallet/viewmodel/WalletViewModel.kt

@@ -1,8 +1,36 @@
 package com.adealink.weparty.wallet.viewmodel
 
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.adealink.frame.base.Rlt
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
-import com.adealink.weparty.module.activity.viewmodel.IActivityViewModel
+import com.adealink.weparty.App
+import com.adealink.weparty.module.wallet.viewmodel.IWalletViewModel
+import com.adealink.weparty.wallet.datasource.remote.WalletHttpService
+import kotlinx.coroutines.launch
 
-class WalletViewModel : BaseViewModel(), IActivityViewModel {
+class WalletViewModel : BaseViewModel(), IWalletViewModel {
+    override val coinLD: LiveData<Long> = MutableLiveData()
+    override val diamondLD: LiveData<Long> = MutableLiveData()
+
+    private val walletHttpService by lazy {
+        App.instance.networkService.getReportHttpService(WalletHttpService::class.java)
+    }
+
+    override fun refreshWalletData() {
+        viewModelScope.launch {
+            val rlt = walletHttpService.pullWallet()
+            when (rlt) {
+                is Rlt.Failed -> {
+
+                }
+
+                is Rlt.Success -> {
+                    coinLD.send(rlt.data.data?.coin ?: 0)
+                    diamondLD.send(rlt.data.data?.diamond ?: 0)
+                }
+            }
+        }
+    }
 
 }