stripe / stripe-java

Java library for the Stripe API.
https://stripe.com
MIT License
827 stars 361 forks source link

Allow public access to `ApiRequestParams` subclass constructors/fields #1393

Open shaun-wild opened 2 years ago

shaun-wild commented 2 years ago

Is your feature request related to a problem? Please describe.

I am using Kotlin and the use of the builders provided on these classes is overly verbose.

Describe the solution you'd like

Make the constructors public, so I can build the objects myself, using Kotlin's Type Safe Builders.

Also, I believe the fields will need to be accessible.

Or even create a Kotlin extensions library with the type-safe builders included.

Describe alternatives you've considered

I've tried creating a wrapper around the builders themselves, but it turned out to be extremely cumbersome.

Additional context

For example, instead of:

val lineItem = SessionCreateParams.LineItem.builder()
            .setPrice(priceID)
            .setQuantity(1)
            .build()

SessionCreateParams.builder().apply {
            setMode(SUBSCRIPTION)
            addPaymentMethodType(SessionCreateParams.PaymentMethodType.CARD)
            addLineItem(lineItem)
            setSuccessUrl("$domainURL/stripe/checkout?sessionID={CHECKOUT_SESSION_ID}&success=true")
            setCancelUrl("$domainURL/stripe/checkout?success=false")
            setAllowPromotionCodes(true)
            setSubscriptionData(subscriptionData)

I could simply do

createSessionParams {
  mode = SUBSCRIPTION
  paymentMethodTypes += CARD
  lineItems = listOf(
    lineItem {
      price = priceID
      quantity = 1
    }
  )
  successUrl = "$domainURL/stripe/checkout?sessionID={CHECKOUT_SESSION_ID}&success=true"
  cancelUrl = "$domainURL/stripe/checkout?success=false"
  allowPromitionCodes = true
  subscriptionData = 
}

But I cannot instantiate the classes myself, as the constructors are private.

shaun-wild commented 2 years ago

Side note: An equals method would be super helpful if we're mocking out Stripe in unit tests!

pakrym-stripe commented 2 years ago

Thank you for your feature request! It's a pretty large change to the design of the library. We'll have to investigate and assess tradeoffs of this change. We might not be able to get to this soon because of other commitments, marking for the future.

shaun-wild commented 2 years ago

Thanks for your response, I look forward to any updates.