Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
Expand Down Expand Up @@ -30,6 +32,18 @@ tasks.dokkaHtmlMultiModule.configure {
outputDirectory.set(file("dokka"))
}

subprojects {
afterEvaluate { project ->
project.plugins.withId('org.jetbrains.kotlin.android') {
project.extensions.configure(KotlinAndroidProjectExtension) { ext ->
ext.compilerOptions {
freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility")
}
}
}
}
}

ext {
minSdkVersion = 21
targetSdkVersion = 36
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.processout.sdk.api.model.request

import android.os.Parcelable
import com.squareup.moshi.JsonClass
import kotlinx.parcelize.Parcelize

/**
Expand All @@ -10,10 +9,29 @@ import kotlinx.parcelize.Parcelize
* @param[invoiceId] Requested invoice ID.
* @param[clientSecret] Client secret is a value of __X-ProcessOut-Client-Secret__ header of the invoice.
* When provided payment methods saved by the customer will be included in the response if the invoice has assigned customer ID.
* @param[expand] Expanded properties.
*/
@Parcelize
@JsonClass(generateAdapter = true)
data class POInvoiceRequest(
val invoiceId: String,
val clientSecret: String? = null
) : Parcelable
val clientSecret: String? = null,
val expand: Set<ExpandedProperty> = emptySet()
) : Parcelable {

/**
* Expandable invoice property.
*/
@Parcelize
data class ExpandedProperty internal constructor(
internal val queryValue: String
) : Parcelable {

companion object {
/** Expands transaction. */
val transaction = ExpandedProperty(queryValue = "transaction")

/** Expands payment methods. */
val paymentMethods = ExpandedProperty(queryValue = "payment_methods")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,10 @@ internal interface InvoicesApi {
@Body request: NativeAlternativePaymentCaptureRequest
): Response<CaptureResponse>

@GET("/invoices/{id}?expand=transaction")
@GET("/invoices/{id}")
suspend fun invoice(
@Path("id") invoiceId: String,
@Query("expand") expandedProperties: String?,
@Header(CLIENT_SECRET) clientSecret: String?
): Response<InvoiceResponse>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,12 @@ internal class DefaultInvoicesRepository(

override suspend fun invoice(request: POInvoiceRequest) =
plainApiCall {
val expandedProperties = request.expand
.joinToString(separator = ",") { it.queryValue }
.takeIf { it.isNotEmpty() }
api.invoice(
invoiceId = request.invoiceId,
expandedProperties = expandedProperties,
clientSecret = request.clientSecret
)
}.map()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,22 +228,14 @@ internal class DefaultInvoicesService(
override suspend fun invoice(
invoiceId: String
): ProcessOutResult<POInvoice> =
repository.invoice(
request = POInvoiceRequest(
invoiceId = invoiceId,
clientSecret = null
)
)
repository.invoice(request = POInvoiceRequest(invoiceId = invoiceId))

override fun invoice(
invoiceId: String,
callback: ProcessOutCallback<POInvoice>
) {
repository.invoice(
request = POInvoiceRequest(
invoiceId = invoiceId,
clientSecret = null
),
request = POInvoiceRequest(invoiceId = invoiceId),
callback = callback
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import com.processout.sdk.R
import com.processout.sdk.api.dispatcher.POEventDispatcher
import com.processout.sdk.api.model.event.PONativeAlternativePaymentMethodEvent.WillSubmitParameters
import com.processout.sdk.api.model.request.*
import com.processout.sdk.api.model.request.POInvoiceRequest.ExpandedProperty.Companion.paymentMethods
import com.processout.sdk.api.model.request.POInvoiceRequest.ExpandedProperty.Companion.transaction
import com.processout.sdk.api.model.response.*
import com.processout.sdk.api.model.response.POBillingAddressCollectionMode.*
import com.processout.sdk.api.model.response.PODynamicCheckoutPaymentMethod.*
Expand Down Expand Up @@ -156,7 +158,10 @@ internal class DynamicCheckoutInteractor(
}

private suspend fun fetchConfiguration() {
invoicesService.invoice(configuration.invoiceRequest)
val request = configuration.invoiceRequest.copy(
expand = setOf(transaction, paymentMethods)
)
invoicesService.invoice(request)
.onSuccess { invoice ->
when (invoice.transaction?.status()) {
WAITING -> setStartedState(invoice)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import coil.request.ImageResult
import com.processout.sdk.R
import com.processout.sdk.api.dispatcher.POEventDispatcher
import com.processout.sdk.api.model.request.PODeleteCustomerTokenRequest
import com.processout.sdk.api.model.request.POInvoiceRequest.ExpandedProperty.Companion.paymentMethods
import com.processout.sdk.api.model.response.PODynamicCheckoutPaymentMethod
import com.processout.sdk.api.model.response.PODynamicCheckoutPaymentMethod.*
import com.processout.sdk.api.model.response.POImageResource
Expand Down Expand Up @@ -77,7 +78,10 @@ internal class SavedPaymentMethodsInteractor(
)

private suspend fun fetchPaymentMethods() {
invoicesService.invoice(configuration.invoiceRequest)
val request = configuration.invoiceRequest.copy(
expand = setOf(paymentMethods)
)
invoicesService.invoice(request)
.onSuccess { invoice ->
val mappedPaymentMethods = invoice.paymentMethods?.map() ?: emptyList()
preloadAllImages(paymentMethods = mappedPaymentMethods)
Expand Down