Skip to content

Commit 479d9c9

Browse files
committed
chore: add onFailure handling to all remaining transaction repository calls
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 22d9a1e commit 479d9c9

6 files changed

Lines changed: 39 additions & 31 deletions

File tree

apps/flipcash/shared/onramp/deeplinks/src/main/kotlin/com/flipcash/app/onramp/internal/ExternalWalletDeeplinkState.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.getcode.solana.rpc.doesAccountExist
3737
import com.getcode.solana.rpc.sendTransaction
3838
import com.getcode.solana.rpc.simulateTransaction
3939
import com.getcode.solana.transactions.inspect
40+
import com.getcode.utils.ErrorUtils
4041
import com.getcode.utils.TraceType
4142
import com.getcode.utils.base64
4243
import com.getcode.utils.hexEncodedString
@@ -233,6 +234,7 @@ class ExternalWalletDeeplinkState(
233234
"message" to error.message
234235
}
235236
)
237+
ErrorUtils.handleError(error)
236238
scope.launch {
237239
errors.emit(
238240
DeeplinkOnRampError.FailedToSendTransaction(

services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.getcode.opencode.model.transactions.Swap
88
import com.getcode.opencode.model.transactions.SwapMetadata
99
import com.getcode.opencode.model.transactions.SwapState
1010
import com.getcode.opencode.repositories.SwapRepository
11+
import com.getcode.utils.ErrorUtils
1112
import javax.inject.Inject
1213

1314
internal class InternalSwapRepository @Inject constructor(
@@ -28,4 +29,5 @@ internal class InternalSwapRepository @Inject constructor(
2829
owner: Ed25519.KeyPair,
2930
targetState: SwapState
3031
): Result<SwapMetadata> = swapPoller.pollUntil(swapId, owner, targetState)
32+
.onFailure { ErrorUtils.handleError(it) }
3133
}

services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.getcode.opencode.repositories.TransactionRepository
1616
import com.getcode.opencode.solana.intents.IntentType
1717
import com.getcode.solana.keys.Mint
1818
import com.getcode.solana.keys.PublicKey
19+
import com.getcode.utils.ErrorUtils
1920
import kotlinx.coroutines.CoroutineScope
2021
import kotlinx.datetime.Instant
2122
import javax.inject.Inject
@@ -28,6 +29,7 @@ internal class InternalTransactionRepository @Inject constructor(
2829
intent: IntentType,
2930
owner: Ed25519.KeyPair
3031
): Result<IntentType> = service.submitIntent(scope, intent, owner)
32+
.onFailure { ErrorUtils.handleError(it) }
3133

3234
override suspend fun getIntentMetadata(
3335
intentId: PublicKey,
@@ -48,6 +50,7 @@ internal class InternalTransactionRepository @Inject constructor(
4850
owner: Ed25519.KeyPair,
4951
giftCardVault: PublicKey
5052
): Result<Unit> = service.voidGiftCard(owner, giftCardVault)
53+
.onFailure { ErrorUtils.handleError(it) }
5154

5255
override suspend fun buy(
5356
scope: CoroutineScope,
@@ -67,7 +70,7 @@ internal class InternalTransactionRepository @Inject constructor(
6770
verifiedState = verifiedState,
6871
source = source,
6972
fund = fund
70-
)
73+
).onFailure { ErrorUtils.handleError(it) }
7174

7275
override suspend fun sell(
7376
scope: CoroutineScope,
@@ -81,5 +84,5 @@ internal class InternalTransactionRepository @Inject constructor(
8184
of = of,
8285
owner = owner,
8386
verifiedState = verifiedState
84-
)
87+
).onFailure { ErrorUtils.handleError(it) }
8588
}

services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import com.getcode.opencode.model.core.PayloadKind
1111
import com.getcode.opencode.model.transactions.TransactionMetadata
1212
import com.getcode.opencode.providers.TokenMetadataProvider
1313
import com.getcode.utils.CodeServerError
14-
import com.getcode.utils.ErrorUtils
1514
import com.getcode.utils.NotifiableError
1615
import kotlinx.coroutines.CoroutineScope
1716
import kotlinx.coroutines.cancel
@@ -122,9 +121,6 @@ internal class GrabBillTransactor(
122121
}
123122

124123
private fun handleGrabError(error: Throwable): Result<Nothing> {
125-
if (error !is GrabTransactorError) {
126-
ErrorUtils.handleError(error)
127-
}
128124
return logAndFail(error)
129125
}
130126

services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactor.kt

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import com.getcode.opencode.model.financial.LocalFiat
1515
import com.getcode.opencode.model.financial.Token
1616
import com.getcode.opencode.providers.TokenMetadataProvider
1717
import com.getcode.utils.CodeServerError
18-
import com.getcode.utils.ErrorUtils
1918
import com.getcode.utils.NotifiableError
2019
import com.getcode.utils.timedTraceSuspend
2120

@@ -95,19 +94,9 @@ internal class ReceiveGiftCardTransactor(
9594

9695
val info = accounts.values.first()
9796

98-
if (info.claimState == AccountInfo.ClaimState.Claimed) {
99-
onStep("pre-claim checks")
100-
return@timedTraceSuspend logAndFail(ReceiveGiftTransactorError.AlreadyClaimed())
101-
}
102-
103-
if (info.claimState == AccountInfo.ClaimState.Expired || info.claimState == AccountInfo.ClaimState.Unknown) {
104-
onStep("pre-claim checks")
105-
return@timedTraceSuspend logAndFail(ReceiveGiftTransactorError.Expired())
106-
}
107-
108-
if (info.isGiftCardIssuer && !claimIfOwned) {
97+
validateClaimEligibility(info, claimIfOwned)?.let { error ->
10998
onStep("pre-claim checks")
110-
return@timedTraceSuspend Result.failure(ReceiveGiftTransactorError.UsersGiftCard())
99+
return@timedTraceSuspend Result.failure(error)
111100
}
112101

113102
val tokenMint = info.mint
@@ -150,9 +139,6 @@ internal class ReceiveGiftCardTransactor(
150139
},
151140
onFailure = {
152141
onStep("intent")
153-
if (it !is ReceiveGiftTransactorError) {
154-
ErrorUtils.handleError(it)
155-
}
156142
logAndFail(it)
157143
}
158144
)
@@ -163,6 +149,29 @@ internal class ReceiveGiftCardTransactor(
163149
owner = null
164150
giftCardAccount = null
165151
}
152+
153+
companion object {
154+
/**
155+
* Validates whether a gift card account is eligible to be claimed.
156+
*
157+
* @return null if eligible, or the appropriate error if not.
158+
*/
159+
fun validateClaimEligibility(
160+
info: AccountInfo,
161+
claimIfOwned: Boolean,
162+
): ReceiveGiftTransactorError? {
163+
if (info.claimState == AccountInfo.ClaimState.Claimed) {
164+
return ReceiveGiftTransactorError.AlreadyClaimed()
165+
}
166+
if (info.claimState == AccountInfo.ClaimState.Expired || info.claimState == AccountInfo.ClaimState.Unknown) {
167+
return ReceiveGiftTransactorError.Expired()
168+
}
169+
if (info.isGiftCardIssuer && !claimIfOwned) {
170+
return ReceiveGiftTransactorError.UsersGiftCard()
171+
}
172+
return null
173+
}
174+
}
166175
}
167176

168177
sealed class ReceiveGiftTransactorError(
@@ -172,13 +181,13 @@ sealed class ReceiveGiftTransactorError(
172181
class FailedToQuery(
173182
override val message: String? = null,
174183
override val cause: Throwable? = null
175-
) : GrabTransactorError(message = message?.let { "Failed to query account - $it" } ?: "Failed to query account"), NotifiableError
176-
class AlreadyClaimed : GrabTransactorError(message = "Already claimed")
177-
class UsersGiftCard : GrabTransactorError(message = "User is gift card issuer")
178-
class Expired : GrabTransactorError(message = "Expired")
184+
) : ReceiveGiftTransactorError(message = message?.let { "Failed to query account - $it" } ?: "Failed to query account"), NotifiableError
185+
class AlreadyClaimed : ReceiveGiftTransactorError(message = "Already claimed")
186+
class UsersGiftCard : ReceiveGiftTransactorError(message = "User is gift card issuer")
187+
class Expired : ReceiveGiftTransactorError(message = "Expired")
179188

180189
data class Other(
181190
override val message: String? = null,
182191
override val cause: Throwable? = null
183-
) : GrabTransactorError(message, cause), NotifiableError
192+
) : ReceiveGiftTransactorError(message, cause), NotifiableError
184193
}

services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import com.getcode.opencode.model.financial.LocalFiat
1212
import com.getcode.opencode.model.financial.Token
1313
import com.getcode.opencode.utils.nonce
1414
import com.getcode.utils.CodeServerError
15-
import com.getcode.utils.ErrorUtils
1615
import com.getcode.utils.NotifiableError
1716

1817
internal class SendGiftCardTransactor(
@@ -79,9 +78,6 @@ internal class SendGiftCardTransactor(
7978
.fold(
8079
onSuccess = { Result.success(it) },
8180
onFailure = {
82-
if (it !is SendTransactorError) {
83-
ErrorUtils.handleError(it)
84-
}
8581
logAndFail(it)
8682
}
8783
)

0 commit comments

Comments
 (0)