Updated on 2026-08-14
This commit is contained in:
parent
5618f44c8b
commit
084bad17ab
18 changed files with 452 additions and 192 deletions
|
|
@ -4,9 +4,11 @@ import com.tangem.datasource.local.datastore.RuntimeDataStore
|
|||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.visa.DefaultTangemPayCardFrozenStateStore
|
||||
import com.tangem.datasource.local.visa.DefaultTangemPayCloseCardStore
|
||||
import com.tangem.datasource.local.visa.DefaultTangemPayIssueCardStore
|
||||
import com.tangem.datasource.local.visa.DefaultTangemPayReissueCardStore
|
||||
import com.tangem.datasource.local.visa.TangemPayCardFrozenStateStore
|
||||
import com.tangem.datasource.local.visa.TangemPayCloseCardStore
|
||||
import com.tangem.datasource.local.visa.TangemPayIssueCardStore
|
||||
import com.tangem.datasource.local.visa.TangemPayReissueCardStore
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
|
@ -42,4 +44,12 @@ internal object TangemPayStoresModule {
|
|||
prefs = prefs,
|
||||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideTangemPayIssueCardStore(prefs: AppPreferencesStore): TangemPayIssueCardStore {
|
||||
return DefaultTangemPayIssueCardStore(
|
||||
prefs = prefs,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.tangem.datasource.local.visa
|
||||
|
||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.utils.getObjectListSync
|
||||
import com.tangem.datasource.local.preferences.utils.storeObjectList
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
||||
internal class DefaultTangemPayIssueCardStore(
|
||||
private val prefs: AppPreferencesStore,
|
||||
) : TangemPayIssueCardStore {
|
||||
|
||||
override suspend fun addIssueOrderId(userWalletId: UserWalletId, orderId: String) {
|
||||
val current = prefs.getObjectListSync<String>(getKey(userWalletId))
|
||||
if (orderId !in current) {
|
||||
prefs.storeObjectList(key = getKey(userWalletId), value = current + orderId)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getIssueOrderIds(userWalletId: UserWalletId): List<String> {
|
||||
return prefs.getObjectListSync(getKey(userWalletId))
|
||||
}
|
||||
|
||||
override suspend fun removeIssueOrderId(userWalletId: UserWalletId, orderId: String) {
|
||||
val current = prefs.getObjectListSync<String>(getKey(userWalletId))
|
||||
if (orderId in current) {
|
||||
prefs.storeObjectList(key = getKey(userWalletId), value = current - orderId)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getKey(userWalletId: UserWalletId) =
|
||||
stringPreferencesKey("tangem_pay_issue_card_orders_${userWalletId.stringValue}")
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.datasource.local.visa
|
||||
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
||||
/**
|
||||
* Local store for additional-card issuance order ids.
|
||||
*
|
||||
* The backend `customer/me` response does not surface a card while it is still being issued, so the
|
||||
* order id of an in-flight additional-card issuance is persisted here (per wallet) to render an
|
||||
* "issuing" placeholder card until the order reaches a terminal state and the real card appears.
|
||||
*/
|
||||
interface TangemPayIssueCardStore {
|
||||
|
||||
suspend fun addIssueOrderId(userWalletId: UserWalletId, orderId: String)
|
||||
|
||||
suspend fun getIssueOrderIds(userWalletId: UserWalletId): List<String>
|
||||
|
||||
suspend fun removeIssueOrderId(userWalletId: UserWalletId, orderId: String)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue