Skip to content

Commit

Permalink
MBL-1252 Add a createAttributionEvent method to the Apollo client (#1970
Browse files Browse the repository at this point in the history
)

* MBL-1252 Add a createAttributionEvent method to the Apollo client
  • Loading branch information
ycheng-kickstarter committed Mar 6, 2024
1 parent 9f17a55 commit 907199a
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ static ApolloClientType provideApolloClientType(final @NonNull ApolloClient apol
@Provides
@Singleton
@NonNull
static ApolloClientTypeV2 provideApolloClientTypeV2(final @NonNull ApolloClient apolloClient) {
return Secrets.IS_OSS ? new MockApolloClientV2() : new KSApolloClientV2(apolloClient);
static ApolloClientTypeV2 provideApolloClientTypeV2(final @NonNull ApolloClient apolloClient, final @NonNull Gson gson) {
return Secrets.IS_OSS ? new MockApolloClientV2() : new KSApolloClientV2(apolloClient, gson);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ static ApolloClientType provideApolloClientType(final @NonNull ApolloClient apol
@Provides
@Singleton
@NonNull
static ApolloClientTypeV2 provideApolloClientTypeV2(final @NonNull ApolloClient apolloClient) {
return Secrets.IS_OSS ? new MockApolloClientV2() : new KSApolloClientV2(apolloClient);
static ApolloClientTypeV2 provideApolloClientTypeV2(final @NonNull ApolloClient apolloClient, final @NonNull Gson gson) {
return Secrets.IS_OSS ? new MockApolloClientV2() : new KSApolloClientV2(apolloClient, gson);
}

@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import com.kickstarter.services.apiresponses.DiscoverEnvelope
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.CreateAttributionEventData
import com.kickstarter.services.mutations.CreateBackingData
import com.kickstarter.services.mutations.CreateCheckoutData
import com.kickstarter.services.mutations.PostCommentData
Expand Down Expand Up @@ -273,7 +274,7 @@ open class MockApolloClientV2 : ApolloClientTypeV2 {
return io.reactivex.Observable.empty()
}

override fun createPaymentIntent(createPaymentIntentInput: CreatePaymentIntentInput): io.reactivex.Observable<String> {
override fun createAttributionEvent(eventInput: CreateAttributionEventData): io.reactivex.Observable<Boolean> {
return io.reactivex.Observable.empty()
}

Expand All @@ -292,6 +293,10 @@ open class MockApolloClientV2 : ApolloClientTypeV2 {
): io.reactivex.Observable<String> {
return io.reactivex.Observable.empty()
}

override fun createPaymentIntent(createPaymentIntentInput: CreatePaymentIntentInput): io.reactivex.Observable<String> {
return io.reactivex.Observable.empty()
}
}

open class MockApolloClient : ApolloClientType {
Expand Down
71 changes: 70 additions & 1 deletion app/src/main/java/com/kickstarter/services/KSApolloClientV2.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,50 @@
package com.kickstarter.services

import CancelBackingMutation
import ClearUserUnseenActivityMutation
import CompleteOnSessionCheckoutMutation
import CreateAttributionEventMutation
import CreateBackingMutation
import CreateCheckoutMutation
import CreateCommentMutation
import CreateFlaggingMutation
import CreatePasswordMutation
import CreatePaymentIntentMutation
import CreateSetupIntentMutation
import DeletePaymentSourceMutation
import ErroredBackingsQuery
import FetchCategoryQuery
import FetchProjectQuery
import GetBackingQuery
import GetCommentQuery
import GetProjectAddOnsQuery
import GetProjectBackingQuery
import GetProjectCommentsQuery
import GetProjectUpdateCommentsQuery
import GetProjectUpdatesQuery
import GetRepliesForCommentQuery
import GetRootCategoriesQuery
import GetShippingRulesForRewardIdQuery
import ProjectCreatorDetailsQuery
import SavePaymentMethodMutation
import SendEmailVerificationMutation
import SendMessageMutation
import TriggerThirdPartyEventMutation
import UnwatchProjectMutation
import UpdateBackingMutation
import UpdateUserCurrencyMutation
import UpdateUserEmailMutation
import UpdateUserPasswordMutation
import UserPaymentsQuery
import UserPrivacyQuery
import ValidateCheckoutQuery
import WatchProjectMutation
import android.util.Pair
import com.apollographql.apollo.ApolloCall
import com.apollographql.apollo.ApolloClient
import com.apollographql.apollo.api.Response
import com.apollographql.apollo.exception.ApolloException
import com.google.gson.Gson
import com.kickstarter.libs.utils.extensions.isNotNull
import com.kickstarter.models.Backing
import com.kickstarter.models.Category
Expand All @@ -28,6 +65,7 @@ import com.kickstarter.services.apiresponses.ShippingRulesEnvelope
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.CreateAttributionEventData
import com.kickstarter.services.mutations.CreateBackingData
import com.kickstarter.services.mutations.CreateCheckoutData
import com.kickstarter.services.mutations.PostCommentData
Expand All @@ -39,6 +77,7 @@ import com.kickstarter.services.transformers.commentTransformer
import com.kickstarter.services.transformers.complexRewardItemsTransformer
import com.kickstarter.services.transformers.decodeRelayId
import com.kickstarter.services.transformers.encodeRelayId
import com.kickstarter.services.transformers.getCreateAttributionEventMutation
import com.kickstarter.services.transformers.getTriggerThirdPartyEventMutation
import com.kickstarter.services.transformers.projectTransformer
import com.kickstarter.services.transformers.rewardTransformer
Expand Down Expand Up @@ -147,12 +186,14 @@ interface ApolloClientTypeV2 {
paymentIntentClientSecret: String,
paymentSourceId: String
): Observable<String>

fun createAttributionEvent(eventInput: CreateAttributionEventData): Observable<Boolean>
}

private const val PAGE_SIZE = 25
private const val REPLIES_PAGE_SIZE = 7

class KSApolloClientV2(val service: ApolloClient) : ApolloClientTypeV2 {
class KSApolloClientV2(val service: ApolloClient, val gson: Gson) : ApolloClientTypeV2 {
override fun getProject(project: Project): Observable<Project> {
return getProject(project.slug() ?: "")
}
Expand Down Expand Up @@ -1544,4 +1585,32 @@ class KSApolloClientV2(val service: ApolloClient) : ApolloClientTypeV2 {
return@defer ps
}
}

override fun createAttributionEvent(eventInput: CreateAttributionEventData): Observable<Boolean> {
return Observable.defer {
val ps = PublishSubject.create<Boolean>()

val mutation = getCreateAttributionEventMutation(eventInput, gson)

service.mutate(mutation)
.enqueue(object : ApolloCall.Callback<CreateAttributionEventMutation.Data>() {
override fun onFailure(exception: ApolloException) {
ps.onError(exception)
}

override fun onResponse(response: Response<CreateAttributionEventMutation.Data>) {
if (response.hasErrors()) {
ps.onError(Exception(response.errors?.first()?.message ?: ""))
}

response.data?.let {
val isSuccess = it.createAttributionEvent()?.successful() ?: false
ps.onNext(isSuccess)
}
ps.onComplete()
}
})
return@defer ps
}
}
}

0 comments on commit 907199a

Please sign in to comment.