Updated on 2026-08-14

This commit is contained in:
Tangem 2026-06-17 14:44:06 +05:00
parent 5618f44c8b
commit 084bad17ab
18 changed files with 452 additions and 192 deletions

View file

@ -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,
)
}
}

View file

@ -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}")
}

View file

@ -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)
}