Skip to content

Commit

Permalink
[MBL-1174] Add support for the CreateCheckout mutation (#1940)
Browse files Browse the repository at this point in the history
* add support for the CreateCheckout mutation, no implementation yet

* lint!

* update some nullables to non nullables
  • Loading branch information
mtgriego committed Feb 1, 2024
1 parent 56f808e commit a211737
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 0 deletions.
9 changes: 9 additions & 0 deletions app/src/main/graphql/checkout.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,12 @@ mutation CreateSetupIntent($projectId: ID) {
clientSecret
}
}

mutation CreateCheckout($projectId: ID!, $amount: String!, $rewardIds: [ID!], $locationId: String, $refParam: String) {
createCheckout(input: { projectId: $projectId, amount: $amount, rewardIds: $rewardIds, locationId: $locationId, refParam: $refParam } ) {
checkout{
id
paymentUrl
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.kickstarter.mock.factories.UpdateFactory
import com.kickstarter.models.Backing
import com.kickstarter.models.Category
import com.kickstarter.models.Checkout
import com.kickstarter.models.CheckoutPayment
import com.kickstarter.models.Comment
import com.kickstarter.models.CreatorDetails
import com.kickstarter.models.ErroredBacking
Expand All @@ -42,6 +43,7 @@ import com.kickstarter.services.apiresponses.ShippingRulesEnvelope
import com.kickstarter.services.apiresponses.commentresponse.CommentEnvelope
import com.kickstarter.services.apiresponses.updatesresponse.UpdatesGraphQlEnvelope
import com.kickstarter.services.mutations.CreateBackingData
import com.kickstarter.services.mutations.CreateCheckoutData
import com.kickstarter.services.mutations.PostCommentData
import com.kickstarter.services.mutations.SavePaymentMethodData
import com.kickstarter.services.mutations.UpdateBackingData
Expand Down Expand Up @@ -264,6 +266,10 @@ open class MockApolloClientV2 : ApolloClientTypeV2 {
override fun getProjectBacking(slug: String): io.reactivex.Observable<Backing> {
return io.reactivex.Observable.just(BackingFactory.backing())
}

override fun createCheckout(createCheckoutData: CreateCheckoutData): io.reactivex.Observable<CheckoutPayment> {
return io.reactivex.Observable.empty()
}
}

open class MockApolloClient : ApolloClientType {
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/kickstarter/models/CheckoutPayment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.kickstarter.models

data class CheckoutPayment(val id: Long, val paymentUrl: String?)
48 changes: 48 additions & 0 deletions app/src/main/java/com/kickstarter/services/KSApolloClientV2.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.kickstarter.libs.utils.extensions.isNotNull
import com.kickstarter.models.Backing
import com.kickstarter.models.Category
import com.kickstarter.models.Checkout
import com.kickstarter.models.CheckoutPayment
import com.kickstarter.models.Comment
import com.kickstarter.models.CreatorDetails
import com.kickstarter.models.ErroredBacking
Expand All @@ -23,6 +24,7 @@ import com.kickstarter.services.apiresponses.commentresponse.CommentEnvelope
import com.kickstarter.services.apiresponses.commentresponse.PageInfoEnvelope
import com.kickstarter.services.apiresponses.updatesresponse.UpdatesGraphQlEnvelope
import com.kickstarter.services.mutations.CreateBackingData
import com.kickstarter.services.mutations.CreateCheckoutData
import com.kickstarter.services.mutations.PostCommentData
import com.kickstarter.services.mutations.SavePaymentMethodData
import com.kickstarter.services.mutations.UpdateBackingData
Expand Down Expand Up @@ -124,6 +126,8 @@ interface ApolloClientTypeV2 {
fun clearUnseenActivity(): Observable<Int>

fun getProjectBacking(slug: String): Observable<Backing>

fun createCheckout(createCheckoutData: CreateCheckoutData): Observable<CheckoutPayment>
}

private const val PAGE_SIZE = 25
Expand Down Expand Up @@ -1385,4 +1389,48 @@ class KSApolloClientV2(val service: ApolloClient) : ApolloClientTypeV2 {
return@defer ps
}.subscribeOn(Schedulers.io())
}

override fun createCheckout(createCheckoutData: CreateCheckoutData): Observable<CheckoutPayment> {
return Observable.defer {
val ps = PublishSubject.create<CheckoutPayment>()

this.service.mutate(
CreateCheckoutMutation.builder()
.projectId(encodeRelayId(createCheckoutData.project))
.amount(createCheckoutData.amount)
.rewardIds(
createCheckoutData.rewardsIds?.let { list ->
list.map { encodeRelayId(it) }
}
)
.locationId(createCheckoutData.locationId)
.refParam(createCheckoutData.refTag?.tag())
.build()
).enqueue(object : ApolloCall.Callback<CreateCheckoutMutation.Data>() {
override fun onFailure(e: ApolloException) {
ps.onError(e)
}

override fun onResponse(response: Response<CreateCheckoutMutation.Data>) {
if (response.hasErrors()) {
ps.onError(Exception(response.errors?.first()?.message))
} else {
response.data?.let { data ->
data.createCheckout()?.checkout()?.let { checkoutObj ->
decodeRelayId(checkoutObj.id())?.let { id ->
val checkout = CheckoutPayment(
id,
checkoutObj.paymentUrl()
)
ps.onNext(checkout)
ps.onComplete()
} ?: ps.onError(Exception("CreateCheckout could not decode ID"))
}
}
}
}
})
return@defer ps
}.subscribeOn(Schedulers.io())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.kickstarter.services.mutations

import com.kickstarter.libs.RefTag
import com.kickstarter.models.Project
import com.kickstarter.models.Reward

data class CreateCheckoutData(val project: Project, val amount: String, val locationId: String?, val rewardsIds: List<Reward> = listOf(), val refTag: RefTag?)

0 comments on commit a211737

Please sign in to comment.