diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 285be38ef..39ba1f879 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.449.0" + ".": "0.450.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 71f54a569..93d127a29 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 232 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-8bcd1f04377ee8ae354a1cb3b1c214232c8b448a93c98502ea92b696bf0757bf.yml -openapi_spec_hash: c338b176720c2dc69dd3f7db351ea8a5 -config_hash: d15ecbf4dc8a7a0ef99397d11b557444 +configured_endpoints: 233 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-1ed184e346fa8c739f7de410b940df9f160681dd818eed4ec1e48b40451007d0.yml +openapi_spec_hash: 0bc3978204acc7949c98e1d098bf5e1c +config_hash: ca482105d83c23b2986f1c9c441c4343 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a564ea66..2d8415cfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.450.0 (2026-03-05) + +Full Changelog: [v0.449.0...v0.450.0](https://github.com/Increase/increase-java/compare/v0.449.0...v0.450.0) + +### Features + +* **api:** api update ([c2ceb5a](https://github.com/Increase/increase-java/commit/c2ceb5a789ab8f7c6ee9e92ac3a46d10210ba02c)) + ## 0.449.0 (2026-03-05) Full Changelog: [v0.448.0...v0.449.0](https://github.com/Increase/increase-java/compare/v0.448.0...v0.449.0) diff --git a/README.md b/README.md index 1027431bc..5d51a13f5 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ -[![Maven Central](https://img.shields.io/maven-central/v/com.increase.api/increase-java)](https://central.sonatype.com/artifact/com.increase.api/increase-java/0.449.0) -[![javadoc](https://javadoc.io/badge2/com.increase.api/increase-java/0.449.0/javadoc.svg)](https://javadoc.io/doc/com.increase.api/increase-java/0.449.0) +[![Maven Central](https://img.shields.io/maven-central/v/com.increase.api/increase-java)](https://central.sonatype.com/artifact/com.increase.api/increase-java/0.450.0) +[![javadoc](https://javadoc.io/badge2/com.increase.api/increase-java/0.450.0/javadoc.svg)](https://javadoc.io/doc/com.increase.api/increase-java/0.450.0) @@ -13,7 +13,7 @@ The Increase Java SDK is similar to the Increase Kotlin SDK but with minor diffe -The REST API documentation can be found on [increase.com](https://increase.com/documentation). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.increase.api/increase-java/0.449.0). +The REST API documentation can be found on [increase.com](https://increase.com/documentation). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.increase.api/increase-java/0.450.0). @@ -24,7 +24,7 @@ The REST API documentation can be found on [increase.com](https://increase.com/d ### Gradle ```kotlin -implementation("com.increase.api:increase-java:0.449.0") +implementation("com.increase.api:increase-java:0.450.0") ``` ### Maven @@ -33,7 +33,7 @@ implementation("com.increase.api:increase-java:0.449.0") com.increase.api increase-java - 0.449.0 + 0.450.0 ``` diff --git a/build.gradle.kts b/build.gradle.kts index 1c0bf3d6b..824f5b624 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ repositories { allprojects { group = "com.increase.api" - version = "0.449.0" // x-release-please-version + version = "0.450.0" // x-release-please-version } subprojects { diff --git a/increase-java-core/src/main/kotlin/com/increase/api/models/simulations/checkdeposits/CheckDepositAdjustmentParams.kt b/increase-java-core/src/main/kotlin/com/increase/api/models/simulations/checkdeposits/CheckDepositAdjustmentParams.kt new file mode 100644 index 000000000..db714c051 --- /dev/null +++ b/increase-java-core/src/main/kotlin/com/increase/api/models/simulations/checkdeposits/CheckDepositAdjustmentParams.kt @@ -0,0 +1,698 @@ +// File generated from our OpenAPI spec by Stainless. + +package com.increase.api.models.simulations.checkdeposits + +import com.fasterxml.jackson.annotation.JsonAnyGetter +import com.fasterxml.jackson.annotation.JsonAnySetter +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty +import com.increase.api.core.Enum +import com.increase.api.core.ExcludeMissing +import com.increase.api.core.JsonField +import com.increase.api.core.JsonMissing +import com.increase.api.core.JsonValue +import com.increase.api.core.Params +import com.increase.api.core.http.Headers +import com.increase.api.core.http.QueryParams +import com.increase.api.errors.IncreaseInvalidDataException +import java.util.Collections +import java.util.Objects +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +/** + * Simulates the creation of a [Check Deposit Adjustment](#check-deposit-adjustments) on a + * [Check Deposit](#check-deposits). This Check Deposit must first have a `status` of `submitted`. + */ +class CheckDepositAdjustmentParams +private constructor( + private val checkDepositId: String?, + private val body: Body, + private val additionalHeaders: Headers, + private val additionalQueryParams: QueryParams, +) : Params { + + /** The identifier of the Check Deposit you wish to adjust. */ + fun checkDepositId(): Optional = Optional.ofNullable(checkDepositId) + + /** + * The adjustment amount in the minor unit of the Check Deposit's currency (e.g., cents). A + * negative amount means that the funds are being clawed back by the other bank and is a debit + * to your account. Defaults to the negative of the Check Deposit amount. + * + * @throws IncreaseInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun amount(): Optional = body.amount() + + /** + * The reason for the adjustment. Defaults to `non_conforming_item`, which is often used for a + * low quality image that the recipient wasn't able to handle. + * + * @throws IncreaseInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun reason(): Optional = body.reason() + + /** + * Returns the raw JSON value of [amount]. + * + * Unlike [amount], this method doesn't throw if the JSON field has an unexpected type. + */ + fun _amount(): JsonField = body._amount() + + /** + * Returns the raw JSON value of [reason]. + * + * Unlike [reason], this method doesn't throw if the JSON field has an unexpected type. + */ + fun _reason(): JsonField = body._reason() + + fun _additionalBodyProperties(): Map = body._additionalProperties() + + /** Additional headers to send with the request. */ + fun _additionalHeaders(): Headers = additionalHeaders + + /** Additional query param to send with the request. */ + fun _additionalQueryParams(): QueryParams = additionalQueryParams + + fun toBuilder() = Builder().from(this) + + companion object { + + @JvmStatic fun none(): CheckDepositAdjustmentParams = builder().build() + + /** + * Returns a mutable builder for constructing an instance of [CheckDepositAdjustmentParams]. + */ + @JvmStatic fun builder() = Builder() + } + + /** A builder for [CheckDepositAdjustmentParams]. */ + class Builder internal constructor() { + + private var checkDepositId: String? = null + private var body: Body.Builder = Body.builder() + private var additionalHeaders: Headers.Builder = Headers.builder() + private var additionalQueryParams: QueryParams.Builder = QueryParams.builder() + + @JvmSynthetic + internal fun from(checkDepositAdjustmentParams: CheckDepositAdjustmentParams) = apply { + checkDepositId = checkDepositAdjustmentParams.checkDepositId + body = checkDepositAdjustmentParams.body.toBuilder() + additionalHeaders = checkDepositAdjustmentParams.additionalHeaders.toBuilder() + additionalQueryParams = checkDepositAdjustmentParams.additionalQueryParams.toBuilder() + } + + /** The identifier of the Check Deposit you wish to adjust. */ + fun checkDepositId(checkDepositId: String?) = apply { this.checkDepositId = checkDepositId } + + /** Alias for calling [Builder.checkDepositId] with `checkDepositId.orElse(null)`. */ + fun checkDepositId(checkDepositId: Optional) = + checkDepositId(checkDepositId.getOrNull()) + + /** + * Sets the entire request body. + * + * This is generally only useful if you are already constructing the body separately. + * Otherwise, it's more convenient to use the top-level setters instead: + * - [amount] + * - [reason] + */ + fun body(body: Body) = apply { this.body = body.toBuilder() } + + /** + * The adjustment amount in the minor unit of the Check Deposit's currency (e.g., cents). A + * negative amount means that the funds are being clawed back by the other bank and is a + * debit to your account. Defaults to the negative of the Check Deposit amount. + */ + fun amount(amount: Long) = apply { body.amount(amount) } + + /** + * Sets [Builder.amount] to an arbitrary JSON value. + * + * You should usually call [Builder.amount] with a well-typed [Long] value instead. This + * method is primarily for setting the field to an undocumented or not yet supported value. + */ + fun amount(amount: JsonField) = apply { body.amount(amount) } + + /** + * The reason for the adjustment. Defaults to `non_conforming_item`, which is often used for + * a low quality image that the recipient wasn't able to handle. + */ + fun reason(reason: Reason) = apply { body.reason(reason) } + + /** + * Sets [Builder.reason] to an arbitrary JSON value. + * + * You should usually call [Builder.reason] with a well-typed [Reason] value instead. This + * method is primarily for setting the field to an undocumented or not yet supported value. + */ + fun reason(reason: JsonField) = apply { body.reason(reason) } + + fun additionalBodyProperties(additionalBodyProperties: Map) = apply { + body.additionalProperties(additionalBodyProperties) + } + + fun putAdditionalBodyProperty(key: String, value: JsonValue) = apply { + body.putAdditionalProperty(key, value) + } + + fun putAllAdditionalBodyProperties(additionalBodyProperties: Map) = + apply { + body.putAllAdditionalProperties(additionalBodyProperties) + } + + fun removeAdditionalBodyProperty(key: String) = apply { body.removeAdditionalProperty(key) } + + fun removeAllAdditionalBodyProperties(keys: Set) = apply { + body.removeAllAdditionalProperties(keys) + } + + fun additionalHeaders(additionalHeaders: Headers) = apply { + this.additionalHeaders.clear() + putAllAdditionalHeaders(additionalHeaders) + } + + fun additionalHeaders(additionalHeaders: Map>) = apply { + this.additionalHeaders.clear() + putAllAdditionalHeaders(additionalHeaders) + } + + fun putAdditionalHeader(name: String, value: String) = apply { + additionalHeaders.put(name, value) + } + + fun putAdditionalHeaders(name: String, values: Iterable) = apply { + additionalHeaders.put(name, values) + } + + fun putAllAdditionalHeaders(additionalHeaders: Headers) = apply { + this.additionalHeaders.putAll(additionalHeaders) + } + + fun putAllAdditionalHeaders(additionalHeaders: Map>) = apply { + this.additionalHeaders.putAll(additionalHeaders) + } + + fun replaceAdditionalHeaders(name: String, value: String) = apply { + additionalHeaders.replace(name, value) + } + + fun replaceAdditionalHeaders(name: String, values: Iterable) = apply { + additionalHeaders.replace(name, values) + } + + fun replaceAllAdditionalHeaders(additionalHeaders: Headers) = apply { + this.additionalHeaders.replaceAll(additionalHeaders) + } + + fun replaceAllAdditionalHeaders(additionalHeaders: Map>) = apply { + this.additionalHeaders.replaceAll(additionalHeaders) + } + + fun removeAdditionalHeaders(name: String) = apply { additionalHeaders.remove(name) } + + fun removeAllAdditionalHeaders(names: Set) = apply { + additionalHeaders.removeAll(names) + } + + fun additionalQueryParams(additionalQueryParams: QueryParams) = apply { + this.additionalQueryParams.clear() + putAllAdditionalQueryParams(additionalQueryParams) + } + + fun additionalQueryParams(additionalQueryParams: Map>) = apply { + this.additionalQueryParams.clear() + putAllAdditionalQueryParams(additionalQueryParams) + } + + fun putAdditionalQueryParam(key: String, value: String) = apply { + additionalQueryParams.put(key, value) + } + + fun putAdditionalQueryParams(key: String, values: Iterable) = apply { + additionalQueryParams.put(key, values) + } + + fun putAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply { + this.additionalQueryParams.putAll(additionalQueryParams) + } + + fun putAllAdditionalQueryParams(additionalQueryParams: Map>) = + apply { + this.additionalQueryParams.putAll(additionalQueryParams) + } + + fun replaceAdditionalQueryParams(key: String, value: String) = apply { + additionalQueryParams.replace(key, value) + } + + fun replaceAdditionalQueryParams(key: String, values: Iterable) = apply { + additionalQueryParams.replace(key, values) + } + + fun replaceAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply { + this.additionalQueryParams.replaceAll(additionalQueryParams) + } + + fun replaceAllAdditionalQueryParams(additionalQueryParams: Map>) = + apply { + this.additionalQueryParams.replaceAll(additionalQueryParams) + } + + fun removeAdditionalQueryParams(key: String) = apply { additionalQueryParams.remove(key) } + + fun removeAllAdditionalQueryParams(keys: Set) = apply { + additionalQueryParams.removeAll(keys) + } + + /** + * Returns an immutable instance of [CheckDepositAdjustmentParams]. + * + * Further updates to this [Builder] will not mutate the returned instance. + */ + fun build(): CheckDepositAdjustmentParams = + CheckDepositAdjustmentParams( + checkDepositId, + body.build(), + additionalHeaders.build(), + additionalQueryParams.build(), + ) + } + + fun _body(): Body = body + + fun _pathParam(index: Int): String = + when (index) { + 0 -> checkDepositId ?: "" + else -> "" + } + + override fun _headers(): Headers = additionalHeaders + + override fun _queryParams(): QueryParams = additionalQueryParams + + class Body + @JsonCreator(mode = JsonCreator.Mode.DISABLED) + private constructor( + private val amount: JsonField, + private val reason: JsonField, + private val additionalProperties: MutableMap, + ) { + + @JsonCreator + private constructor( + @JsonProperty("amount") @ExcludeMissing amount: JsonField = JsonMissing.of(), + @JsonProperty("reason") @ExcludeMissing reason: JsonField = JsonMissing.of(), + ) : this(amount, reason, mutableMapOf()) + + /** + * The adjustment amount in the minor unit of the Check Deposit's currency (e.g., cents). A + * negative amount means that the funds are being clawed back by the other bank and is a + * debit to your account. Defaults to the negative of the Check Deposit amount. + * + * @throws IncreaseInvalidDataException if the JSON field has an unexpected type (e.g. if + * the server responded with an unexpected value). + */ + fun amount(): Optional = amount.getOptional("amount") + + /** + * The reason for the adjustment. Defaults to `non_conforming_item`, which is often used for + * a low quality image that the recipient wasn't able to handle. + * + * @throws IncreaseInvalidDataException if the JSON field has an unexpected type (e.g. if + * the server responded with an unexpected value). + */ + fun reason(): Optional = reason.getOptional("reason") + + /** + * Returns the raw JSON value of [amount]. + * + * Unlike [amount], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("amount") @ExcludeMissing fun _amount(): JsonField = amount + + /** + * Returns the raw JSON value of [reason]. + * + * Unlike [reason], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("reason") @ExcludeMissing fun _reason(): JsonField = reason + + @JsonAnySetter + private fun putAdditionalProperty(key: String, value: JsonValue) { + additionalProperties.put(key, value) + } + + @JsonAnyGetter + @ExcludeMissing + fun _additionalProperties(): Map = + Collections.unmodifiableMap(additionalProperties) + + fun toBuilder() = Builder().from(this) + + companion object { + + /** Returns a mutable builder for constructing an instance of [Body]. */ + @JvmStatic fun builder() = Builder() + } + + /** A builder for [Body]. */ + class Builder internal constructor() { + + private var amount: JsonField = JsonMissing.of() + private var reason: JsonField = JsonMissing.of() + private var additionalProperties: MutableMap = mutableMapOf() + + @JvmSynthetic + internal fun from(body: Body) = apply { + amount = body.amount + reason = body.reason + additionalProperties = body.additionalProperties.toMutableMap() + } + + /** + * The adjustment amount in the minor unit of the Check Deposit's currency (e.g., + * cents). A negative amount means that the funds are being clawed back by the other + * bank and is a debit to your account. Defaults to the negative of the Check Deposit + * amount. + */ + fun amount(amount: Long) = amount(JsonField.of(amount)) + + /** + * Sets [Builder.amount] to an arbitrary JSON value. + * + * You should usually call [Builder.amount] with a well-typed [Long] value instead. This + * method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun amount(amount: JsonField) = apply { this.amount = amount } + + /** + * The reason for the adjustment. Defaults to `non_conforming_item`, which is often used + * for a low quality image that the recipient wasn't able to handle. + */ + fun reason(reason: Reason) = reason(JsonField.of(reason)) + + /** + * Sets [Builder.reason] to an arbitrary JSON value. + * + * You should usually call [Builder.reason] with a well-typed [Reason] value instead. + * This method is primarily for setting the field to an undocumented or not yet + * supported value. + */ + fun reason(reason: JsonField) = apply { this.reason = reason } + + fun additionalProperties(additionalProperties: Map) = apply { + this.additionalProperties.clear() + putAllAdditionalProperties(additionalProperties) + } + + fun putAdditionalProperty(key: String, value: JsonValue) = apply { + additionalProperties.put(key, value) + } + + fun putAllAdditionalProperties(additionalProperties: Map) = apply { + this.additionalProperties.putAll(additionalProperties) + } + + fun removeAdditionalProperty(key: String) = apply { additionalProperties.remove(key) } + + fun removeAllAdditionalProperties(keys: Set) = apply { + keys.forEach(::removeAdditionalProperty) + } + + /** + * Returns an immutable instance of [Body]. + * + * Further updates to this [Builder] will not mutate the returned instance. + */ + fun build(): Body = Body(amount, reason, additionalProperties.toMutableMap()) + } + + private var validated: Boolean = false + + fun validate(): Body = apply { + if (validated) { + return@apply + } + + amount() + reason().ifPresent { it.validate() } + validated = true + } + + fun isValid(): Boolean = + try { + validate() + true + } catch (e: IncreaseInvalidDataException) { + false + } + + /** + * Returns a score indicating how many valid values are contained in this object + * recursively. + * + * Used for best match union deserialization. + */ + @JvmSynthetic + internal fun validity(): Int = + (if (amount.asKnown().isPresent) 1 else 0) + + (reason.asKnown().getOrNull()?.validity() ?: 0) + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is Body && + amount == other.amount && + reason == other.reason && + additionalProperties == other.additionalProperties + } + + private val hashCode: Int by lazy { Objects.hash(amount, reason, additionalProperties) } + + override fun hashCode(): Int = hashCode + + override fun toString() = + "Body{amount=$amount, reason=$reason, additionalProperties=$additionalProperties}" + } + + /** + * The reason for the adjustment. Defaults to `non_conforming_item`, which is often used for a + * low quality image that the recipient wasn't able to handle. + */ + class Reason @JsonCreator private constructor(private val value: JsonField) : Enum { + + /** + * Returns this class instance's raw value. + * + * This is usually only useful if this instance was deserialized from data that doesn't + * match any known member, and you want to know that value. For example, if the SDK is on an + * older version than the API, then the API may respond with new members that the SDK is + * unaware of. + */ + @com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value + + companion object { + + /** + * The return was initiated too late and the receiving institution has responded with a + * Late Return Claim. + */ + @JvmField val LATE_RETURN = of("late_return") + + /** + * The check was deposited to the wrong payee and the depositing institution has + * reimbursed the funds with a Wrong Payee Credit. + */ + @JvmField val WRONG_PAYEE_CREDIT = of("wrong_payee_credit") + + /** + * The check was deposited with a different amount than what was written on the check. + */ + @JvmField val ADJUSTED_AMOUNT = of("adjusted_amount") + + /** + * The recipient was not able to process the check. This usually happens for e.g., low + * quality images. + */ + @JvmField val NON_CONFORMING_ITEM = of("non_conforming_item") + + /** The check has already been deposited elsewhere and so this is a duplicate. */ + @JvmField val PAID = of("paid") + + @JvmStatic fun of(value: String) = Reason(JsonField.of(value)) + } + + /** An enum containing [Reason]'s known values. */ + enum class Known { + /** + * The return was initiated too late and the receiving institution has responded with a + * Late Return Claim. + */ + LATE_RETURN, + /** + * The check was deposited to the wrong payee and the depositing institution has + * reimbursed the funds with a Wrong Payee Credit. + */ + WRONG_PAYEE_CREDIT, + /** + * The check was deposited with a different amount than what was written on the check. + */ + ADJUSTED_AMOUNT, + /** + * The recipient was not able to process the check. This usually happens for e.g., low + * quality images. + */ + NON_CONFORMING_ITEM, + /** The check has already been deposited elsewhere and so this is a duplicate. */ + PAID, + } + + /** + * An enum containing [Reason]'s known values, as well as an [_UNKNOWN] member. + * + * An instance of [Reason] can contain an unknown value in a couple of cases: + * - It was deserialized from data that doesn't match any known member. For example, if the + * SDK is on an older version than the API, then the API may respond with new members that + * the SDK is unaware of. + * - It was constructed with an arbitrary value using the [of] method. + */ + enum class Value { + /** + * The return was initiated too late and the receiving institution has responded with a + * Late Return Claim. + */ + LATE_RETURN, + /** + * The check was deposited to the wrong payee and the depositing institution has + * reimbursed the funds with a Wrong Payee Credit. + */ + WRONG_PAYEE_CREDIT, + /** + * The check was deposited with a different amount than what was written on the check. + */ + ADJUSTED_AMOUNT, + /** + * The recipient was not able to process the check. This usually happens for e.g., low + * quality images. + */ + NON_CONFORMING_ITEM, + /** The check has already been deposited elsewhere and so this is a duplicate. */ + PAID, + /** An enum member indicating that [Reason] was instantiated with an unknown value. */ + _UNKNOWN, + } + + /** + * Returns an enum member corresponding to this class instance's value, or [Value._UNKNOWN] + * if the class was instantiated with an unknown value. + * + * Use the [known] method instead if you're certain the value is always known or if you want + * to throw for the unknown case. + */ + fun value(): Value = + when (this) { + LATE_RETURN -> Value.LATE_RETURN + WRONG_PAYEE_CREDIT -> Value.WRONG_PAYEE_CREDIT + ADJUSTED_AMOUNT -> Value.ADJUSTED_AMOUNT + NON_CONFORMING_ITEM -> Value.NON_CONFORMING_ITEM + PAID -> Value.PAID + else -> Value._UNKNOWN + } + + /** + * Returns an enum member corresponding to this class instance's value. + * + * Use the [value] method instead if you're uncertain the value is always known and don't + * want to throw for the unknown case. + * + * @throws IncreaseInvalidDataException if this class instance's value is a not a known + * member. + */ + fun known(): Known = + when (this) { + LATE_RETURN -> Known.LATE_RETURN + WRONG_PAYEE_CREDIT -> Known.WRONG_PAYEE_CREDIT + ADJUSTED_AMOUNT -> Known.ADJUSTED_AMOUNT + NON_CONFORMING_ITEM -> Known.NON_CONFORMING_ITEM + PAID -> Known.PAID + else -> throw IncreaseInvalidDataException("Unknown Reason: $value") + } + + /** + * Returns this class instance's primitive wire representation. + * + * This differs from the [toString] method because that method is primarily for debugging + * and generally doesn't throw. + * + * @throws IncreaseInvalidDataException if this class instance's value does not have the + * expected primitive type. + */ + fun asString(): String = + _value().asString().orElseThrow { + IncreaseInvalidDataException("Value is not a String") + } + + private var validated: Boolean = false + + fun validate(): Reason = apply { + if (validated) { + return@apply + } + + known() + validated = true + } + + fun isValid(): Boolean = + try { + validate() + true + } catch (e: IncreaseInvalidDataException) { + false + } + + /** + * Returns a score indicating how many valid values are contained in this object + * recursively. + * + * Used for best match union deserialization. + */ + @JvmSynthetic internal fun validity(): Int = if (value() == Value._UNKNOWN) 0 else 1 + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is Reason && value == other.value + } + + override fun hashCode() = value.hashCode() + + override fun toString() = value.toString() + } + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is CheckDepositAdjustmentParams && + checkDepositId == other.checkDepositId && + body == other.body && + additionalHeaders == other.additionalHeaders && + additionalQueryParams == other.additionalQueryParams + } + + override fun hashCode(): Int = + Objects.hash(checkDepositId, body, additionalHeaders, additionalQueryParams) + + override fun toString() = + "CheckDepositAdjustmentParams{checkDepositId=$checkDepositId, body=$body, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}" +} diff --git a/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsync.kt b/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsync.kt index fff1ac0aa..2713748f3 100644 --- a/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsync.kt +++ b/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsync.kt @@ -6,6 +6,7 @@ import com.increase.api.core.ClientOptions import com.increase.api.core.RequestOptions import com.increase.api.core.http.HttpResponseFor import com.increase.api.models.checkdeposits.CheckDeposit +import com.increase.api.models.simulations.checkdeposits.CheckDepositAdjustmentParams import com.increase.api.models.simulations.checkdeposits.CheckDepositRejectParams import com.increase.api.models.simulations.checkdeposits.CheckDepositReturnParams import com.increase.api.models.simulations.checkdeposits.CheckDepositSubmitParams @@ -26,6 +27,45 @@ interface CheckDepositServiceAsync { */ fun withOptions(modifier: Consumer): CheckDepositServiceAsync + /** + * Simulates the creation of a [Check Deposit Adjustment](#check-deposit-adjustments) on a + * [Check Deposit](#check-deposits). This Check Deposit must first have a `status` of + * `submitted`. + */ + fun adjustment(checkDepositId: String): CompletableFuture = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none()) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture = + adjustment(params.toBuilder().checkDepositId(checkDepositId).build(), requestOptions) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + ): CompletableFuture = adjustment(checkDepositId, params, RequestOptions.none()) + + /** @see adjustment */ + fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture + + /** @see adjustment */ + fun adjustment(params: CheckDepositAdjustmentParams): CompletableFuture = + adjustment(params, RequestOptions.none()) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + requestOptions: RequestOptions, + ): CompletableFuture = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none(), requestOptions) + /** * Simulates the rejection of a [Check Deposit](#check-deposits) by Increase due to factors like * poor image quality. This Check Deposit must first have a `status` of `pending`. @@ -155,6 +195,48 @@ interface CheckDepositServiceAsync { modifier: Consumer ): CheckDepositServiceAsync.WithRawResponse + /** + * Returns a raw HTTP response for `post + * /simulations/check_deposits/{check_deposit_id}/adjustment`, but is otherwise the same as + * [CheckDepositServiceAsync.adjustment]. + */ + fun adjustment(checkDepositId: String): CompletableFuture> = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none()) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture> = + adjustment(params.toBuilder().checkDepositId(checkDepositId).build(), requestOptions) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + ): CompletableFuture> = + adjustment(checkDepositId, params, RequestOptions.none()) + + /** @see adjustment */ + fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture> + + /** @see adjustment */ + fun adjustment( + params: CheckDepositAdjustmentParams + ): CompletableFuture> = + adjustment(params, RequestOptions.none()) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + requestOptions: RequestOptions, + ): CompletableFuture> = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none(), requestOptions) + /** * Returns a raw HTTP response for `post * /simulations/check_deposits/{check_deposit_id}/reject`, but is otherwise the same as diff --git a/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncImpl.kt b/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncImpl.kt index 24f03975b..7870a8d57 100644 --- a/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncImpl.kt +++ b/increase-java-core/src/main/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncImpl.kt @@ -17,6 +17,7 @@ import com.increase.api.core.http.json import com.increase.api.core.http.parseable import com.increase.api.core.prepareAsync import com.increase.api.models.checkdeposits.CheckDeposit +import com.increase.api.models.simulations.checkdeposits.CheckDepositAdjustmentParams import com.increase.api.models.simulations.checkdeposits.CheckDepositRejectParams import com.increase.api.models.simulations.checkdeposits.CheckDepositReturnParams import com.increase.api.models.simulations.checkdeposits.CheckDepositSubmitParams @@ -36,6 +37,13 @@ class CheckDepositServiceAsyncImpl internal constructor(private val clientOption override fun withOptions(modifier: Consumer): CheckDepositServiceAsync = CheckDepositServiceAsyncImpl(clientOptions.toBuilder().apply(modifier::accept).build()) + override fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions, + ): CompletableFuture = + // post /simulations/check_deposits/{check_deposit_id}/adjustment + withRawResponse().adjustment(params, requestOptions).thenApply { it.parse() } + override fun reject( params: CheckDepositRejectParams, requestOptions: RequestOptions, @@ -70,6 +78,45 @@ class CheckDepositServiceAsyncImpl internal constructor(private val clientOption clientOptions.toBuilder().apply(modifier::accept).build() ) + private val adjustmentHandler: Handler = + jsonHandler(clientOptions.jsonMapper) + + override fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions, + ): CompletableFuture> { + // We check here instead of in the params builder because this can be specified + // positionally or in the params class. + checkRequired("checkDepositId", params.checkDepositId().getOrNull()) + val request = + HttpRequest.builder() + .method(HttpMethod.POST) + .baseUrl(clientOptions.baseUrl()) + .addPathSegments( + "simulations", + "check_deposits", + params._pathParam(0), + "adjustment", + ) + .body(json(clientOptions.jsonMapper, params._body())) + .build() + .prepareAsync(clientOptions, params) + val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions)) + return request + .thenComposeAsync { clientOptions.httpClient.executeAsync(it, requestOptions) } + .thenApply { response -> + errorHandler.handle(response).parseable { + response + .use { adjustmentHandler.handle(it) } + .also { + if (requestOptions.responseValidation!!) { + it.validate() + } + } + } + } + } + private val rejectHandler: Handler = jsonHandler(clientOptions.jsonMapper) diff --git a/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositService.kt b/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositService.kt index 2f8bf7ace..ae93cca91 100644 --- a/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositService.kt +++ b/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositService.kt @@ -7,6 +7,7 @@ import com.increase.api.core.ClientOptions import com.increase.api.core.RequestOptions import com.increase.api.core.http.HttpResponseFor import com.increase.api.models.checkdeposits.CheckDeposit +import com.increase.api.models.simulations.checkdeposits.CheckDepositAdjustmentParams import com.increase.api.models.simulations.checkdeposits.CheckDepositRejectParams import com.increase.api.models.simulations.checkdeposits.CheckDepositReturnParams import com.increase.api.models.simulations.checkdeposits.CheckDepositSubmitParams @@ -26,6 +27,42 @@ interface CheckDepositService { */ fun withOptions(modifier: Consumer): CheckDepositService + /** + * Simulates the creation of a [Check Deposit Adjustment](#check-deposit-adjustments) on a + * [Check Deposit](#check-deposits). This Check Deposit must first have a `status` of + * `submitted`. + */ + fun adjustment(checkDepositId: String): CheckDeposit = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none()) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): CheckDeposit = + adjustment(params.toBuilder().checkDepositId(checkDepositId).build(), requestOptions) + + /** @see adjustment */ + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + ): CheckDeposit = adjustment(checkDepositId, params, RequestOptions.none()) + + /** @see adjustment */ + fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): CheckDeposit + + /** @see adjustment */ + fun adjustment(params: CheckDepositAdjustmentParams): CheckDeposit = + adjustment(params, RequestOptions.none()) + + /** @see adjustment */ + fun adjustment(checkDepositId: String, requestOptions: RequestOptions): CheckDeposit = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none(), requestOptions) + /** * Simulates the rejection of a [Check Deposit](#check-deposits) by Increase due to factors like * poor image quality. This Check Deposit must first have a `status` of `pending`. @@ -145,6 +182,51 @@ interface CheckDepositService { modifier: Consumer ): CheckDepositService.WithRawResponse + /** + * Returns a raw HTTP response for `post + * /simulations/check_deposits/{check_deposit_id}/adjustment`, but is otherwise the same as + * [CheckDepositService.adjustment]. + */ + @MustBeClosed + fun adjustment(checkDepositId: String): HttpResponseFor = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none()) + + /** @see adjustment */ + @MustBeClosed + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): HttpResponseFor = + adjustment(params.toBuilder().checkDepositId(checkDepositId).build(), requestOptions) + + /** @see adjustment */ + @MustBeClosed + fun adjustment( + checkDepositId: String, + params: CheckDepositAdjustmentParams = CheckDepositAdjustmentParams.none(), + ): HttpResponseFor = adjustment(checkDepositId, params, RequestOptions.none()) + + /** @see adjustment */ + @MustBeClosed + fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): HttpResponseFor + + /** @see adjustment */ + @MustBeClosed + fun adjustment(params: CheckDepositAdjustmentParams): HttpResponseFor = + adjustment(params, RequestOptions.none()) + + /** @see adjustment */ + @MustBeClosed + fun adjustment( + checkDepositId: String, + requestOptions: RequestOptions, + ): HttpResponseFor = + adjustment(checkDepositId, CheckDepositAdjustmentParams.none(), requestOptions) + /** * Returns a raw HTTP response for `post * /simulations/check_deposits/{check_deposit_id}/reject`, but is otherwise the same as diff --git a/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceImpl.kt b/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceImpl.kt index cc02438da..5c2e6499b 100644 --- a/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceImpl.kt +++ b/increase-java-core/src/main/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceImpl.kt @@ -17,6 +17,7 @@ import com.increase.api.core.http.json import com.increase.api.core.http.parseable import com.increase.api.core.prepare import com.increase.api.models.checkdeposits.CheckDeposit +import com.increase.api.models.simulations.checkdeposits.CheckDepositAdjustmentParams import com.increase.api.models.simulations.checkdeposits.CheckDepositRejectParams import com.increase.api.models.simulations.checkdeposits.CheckDepositReturnParams import com.increase.api.models.simulations.checkdeposits.CheckDepositSubmitParams @@ -35,6 +36,13 @@ class CheckDepositServiceImpl internal constructor(private val clientOptions: Cl override fun withOptions(modifier: Consumer): CheckDepositService = CheckDepositServiceImpl(clientOptions.toBuilder().apply(modifier::accept).build()) + override fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions, + ): CheckDeposit = + // post /simulations/check_deposits/{check_deposit_id}/adjustment + withRawResponse().adjustment(params, requestOptions).parse() + override fun reject( params: CheckDepositRejectParams, requestOptions: RequestOptions, @@ -69,6 +77,42 @@ class CheckDepositServiceImpl internal constructor(private val clientOptions: Cl clientOptions.toBuilder().apply(modifier::accept).build() ) + private val adjustmentHandler: Handler = + jsonHandler(clientOptions.jsonMapper) + + override fun adjustment( + params: CheckDepositAdjustmentParams, + requestOptions: RequestOptions, + ): HttpResponseFor { + // We check here instead of in the params builder because this can be specified + // positionally or in the params class. + checkRequired("checkDepositId", params.checkDepositId().getOrNull()) + val request = + HttpRequest.builder() + .method(HttpMethod.POST) + .baseUrl(clientOptions.baseUrl()) + .addPathSegments( + "simulations", + "check_deposits", + params._pathParam(0), + "adjustment", + ) + .body(json(clientOptions.jsonMapper, params._body())) + .build() + .prepare(clientOptions, params) + val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions)) + val response = clientOptions.httpClient.execute(request, requestOptions) + return errorHandler.handle(response).parseable { + response + .use { adjustmentHandler.handle(it) } + .also { + if (requestOptions.responseValidation!!) { + it.validate() + } + } + } + } + private val rejectHandler: Handler = jsonHandler(clientOptions.jsonMapper) diff --git a/increase-java-core/src/test/kotlin/com/increase/api/models/simulations/checkdeposits/CheckDepositAdjustmentParamsTest.kt b/increase-java-core/src/test/kotlin/com/increase/api/models/simulations/checkdeposits/CheckDepositAdjustmentParamsTest.kt new file mode 100644 index 000000000..120695757 --- /dev/null +++ b/increase-java-core/src/test/kotlin/com/increase/api/models/simulations/checkdeposits/CheckDepositAdjustmentParamsTest.kt @@ -0,0 +1,55 @@ +// File generated from our OpenAPI spec by Stainless. + +package com.increase.api.models.simulations.checkdeposits + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +internal class CheckDepositAdjustmentParamsTest { + + @Test + fun create() { + CheckDepositAdjustmentParams.builder() + .checkDepositId("check_deposit_f06n9gpg7sxn8t19lfc1") + .amount(-1000000000L) + .reason(CheckDepositAdjustmentParams.Reason.LATE_RETURN) + .build() + } + + @Test + fun pathParams() { + val params = + CheckDepositAdjustmentParams.builder() + .checkDepositId("check_deposit_f06n9gpg7sxn8t19lfc1") + .build() + + assertThat(params._pathParam(0)).isEqualTo("check_deposit_f06n9gpg7sxn8t19lfc1") + // out-of-bound path param + assertThat(params._pathParam(1)).isEqualTo("") + } + + @Test + fun body() { + val params = + CheckDepositAdjustmentParams.builder() + .checkDepositId("check_deposit_f06n9gpg7sxn8t19lfc1") + .amount(-1000000000L) + .reason(CheckDepositAdjustmentParams.Reason.LATE_RETURN) + .build() + + val body = params._body() + + assertThat(body.amount()).contains(-1000000000L) + assertThat(body.reason()).contains(CheckDepositAdjustmentParams.Reason.LATE_RETURN) + } + + @Test + fun bodyWithoutOptionalFields() { + val params = + CheckDepositAdjustmentParams.builder() + .checkDepositId("check_deposit_f06n9gpg7sxn8t19lfc1") + .build() + + val body = params._body() + } +} diff --git a/increase-java-core/src/test/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncTest.kt b/increase-java-core/src/test/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncTest.kt index 2d290bf66..190d80a19 100644 --- a/increase-java-core/src/test/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncTest.kt +++ b/increase-java-core/src/test/kotlin/com/increase/api/services/async/simulations/CheckDepositServiceAsyncTest.kt @@ -4,6 +4,7 @@ package com.increase.api.services.async.simulations import com.increase.api.TestServerExtension import com.increase.api.client.okhttp.IncreaseOkHttpClientAsync +import com.increase.api.models.simulations.checkdeposits.CheckDepositAdjustmentParams import com.increase.api.models.simulations.checkdeposits.CheckDepositSubmitParams import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -11,6 +12,28 @@ import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(TestServerExtension::class) internal class CheckDepositServiceAsyncTest { + @Test + fun adjustment() { + val client = + IncreaseOkHttpClientAsync.builder() + .baseUrl(TestServerExtension.BASE_URL) + .apiKey("My API Key") + .build() + val checkDepositServiceAsync = client.simulations().checkDeposits() + + val checkDepositFuture = + checkDepositServiceAsync.adjustment( + CheckDepositAdjustmentParams.builder() + .checkDepositId("check_deposit_f06n9gpg7sxn8t19lfc1") + .amount(-1000000000L) + .reason(CheckDepositAdjustmentParams.Reason.LATE_RETURN) + .build() + ) + + val checkDeposit = checkDepositFuture.get() + checkDeposit.validate() + } + @Test fun reject() { val client = diff --git a/increase-java-core/src/test/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceTest.kt b/increase-java-core/src/test/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceTest.kt index fd139b3fe..d8710f5bd 100644 --- a/increase-java-core/src/test/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceTest.kt +++ b/increase-java-core/src/test/kotlin/com/increase/api/services/blocking/simulations/CheckDepositServiceTest.kt @@ -4,6 +4,7 @@ package com.increase.api.services.blocking.simulations import com.increase.api.TestServerExtension import com.increase.api.client.okhttp.IncreaseOkHttpClient +import com.increase.api.models.simulations.checkdeposits.CheckDepositAdjustmentParams import com.increase.api.models.simulations.checkdeposits.CheckDepositSubmitParams import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -11,6 +12,27 @@ import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(TestServerExtension::class) internal class CheckDepositServiceTest { + @Test + fun adjustment() { + val client = + IncreaseOkHttpClient.builder() + .baseUrl(TestServerExtension.BASE_URL) + .apiKey("My API Key") + .build() + val checkDepositService = client.simulations().checkDeposits() + + val checkDeposit = + checkDepositService.adjustment( + CheckDepositAdjustmentParams.builder() + .checkDepositId("check_deposit_f06n9gpg7sxn8t19lfc1") + .amount(-1000000000L) + .reason(CheckDepositAdjustmentParams.Reason.LATE_RETURN) + .build() + ) + + checkDeposit.validate() + } + @Test fun reject() { val client =