Skip to content

Commit 9d71aad

Browse files
stainless-botstainless-app[bot]
authored andcommitted
feat(api): add search_by_pan endpoint (#146)
1 parent 1c9f9b0 commit 9d71aad

8 files changed

Lines changed: 371 additions & 1 deletion

File tree

.stats.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
configured_endpoints: 106
1+
configured_endpoints: 107
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
// File generated from our OpenAPI spec by Stainless.
2+
3+
package com.lithic.api.models
4+
5+
import com.fasterxml.jackson.annotation.JsonAnyGetter
6+
import com.fasterxml.jackson.annotation.JsonAnySetter
7+
import com.fasterxml.jackson.annotation.JsonProperty
8+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
9+
import com.lithic.api.core.ExcludeMissing
10+
import com.lithic.api.core.JsonValue
11+
import com.lithic.api.core.NoAutoDetect
12+
import com.lithic.api.core.toUnmodifiable
13+
import com.lithic.api.models.*
14+
import java.util.Objects
15+
16+
class CardSearchByPanParams
17+
constructor(
18+
private val pan: String,
19+
private val additionalQueryParams: Map<String, List<String>>,
20+
private val additionalHeaders: Map<String, List<String>>,
21+
private val additionalBodyProperties: Map<String, JsonValue>,
22+
) {
23+
24+
fun pan(): String = pan
25+
26+
@JvmSynthetic
27+
internal fun getBody(): CardSearchByPanBody {
28+
return CardSearchByPanBody(pan, additionalBodyProperties)
29+
}
30+
31+
@JvmSynthetic internal fun getQueryParams(): Map<String, List<String>> = additionalQueryParams
32+
33+
@JvmSynthetic internal fun getHeaders(): Map<String, List<String>> = additionalHeaders
34+
35+
@JsonDeserialize(builder = CardSearchByPanBody.Builder::class)
36+
@NoAutoDetect
37+
class CardSearchByPanBody
38+
internal constructor(
39+
private val pan: String?,
40+
private val additionalProperties: Map<String, JsonValue>,
41+
) {
42+
43+
private var hashCode: Int = 0
44+
45+
/** The PAN for the card being retrieved. */
46+
@JsonProperty("pan") fun pan(): String? = pan
47+
48+
@JsonAnyGetter
49+
@ExcludeMissing
50+
fun _additionalProperties(): Map<String, JsonValue> = additionalProperties
51+
52+
fun toBuilder() = Builder().from(this)
53+
54+
override fun equals(other: Any?): Boolean {
55+
if (this === other) {
56+
return true
57+
}
58+
59+
return other is CardSearchByPanBody &&
60+
this.pan == other.pan &&
61+
this.additionalProperties == other.additionalProperties
62+
}
63+
64+
override fun hashCode(): Int {
65+
if (hashCode == 0) {
66+
hashCode = Objects.hash(pan, additionalProperties)
67+
}
68+
return hashCode
69+
}
70+
71+
override fun toString() =
72+
"CardSearchByPanBody{pan=$pan, additionalProperties=$additionalProperties}"
73+
74+
companion object {
75+
76+
@JvmStatic fun builder() = Builder()
77+
}
78+
79+
class Builder {
80+
81+
private var pan: String? = null
82+
private var additionalProperties: MutableMap<String, JsonValue> = mutableMapOf()
83+
84+
@JvmSynthetic
85+
internal fun from(cardSearchByPanBody: CardSearchByPanBody) = apply {
86+
this.pan = cardSearchByPanBody.pan
87+
additionalProperties(cardSearchByPanBody.additionalProperties)
88+
}
89+
90+
/** The PAN for the card being retrieved. */
91+
@JsonProperty("pan") fun pan(pan: String) = apply { this.pan = pan }
92+
93+
fun additionalProperties(additionalProperties: Map<String, JsonValue>) = apply {
94+
this.additionalProperties.clear()
95+
this.additionalProperties.putAll(additionalProperties)
96+
}
97+
98+
@JsonAnySetter
99+
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
100+
this.additionalProperties.put(key, value)
101+
}
102+
103+
fun putAllAdditionalProperties(additionalProperties: Map<String, JsonValue>) = apply {
104+
this.additionalProperties.putAll(additionalProperties)
105+
}
106+
107+
fun build(): CardSearchByPanBody =
108+
CardSearchByPanBody(
109+
checkNotNull(pan) { "`pan` is required but was not set" },
110+
additionalProperties.toUnmodifiable()
111+
)
112+
}
113+
}
114+
115+
fun _additionalQueryParams(): Map<String, List<String>> = additionalQueryParams
116+
117+
fun _additionalHeaders(): Map<String, List<String>> = additionalHeaders
118+
119+
fun _additionalBodyProperties(): Map<String, JsonValue> = additionalBodyProperties
120+
121+
override fun equals(other: Any?): Boolean {
122+
if (this === other) {
123+
return true
124+
}
125+
126+
return other is CardSearchByPanParams &&
127+
this.pan == other.pan &&
128+
this.additionalQueryParams == other.additionalQueryParams &&
129+
this.additionalHeaders == other.additionalHeaders &&
130+
this.additionalBodyProperties == other.additionalBodyProperties
131+
}
132+
133+
override fun hashCode(): Int {
134+
return Objects.hash(
135+
pan,
136+
additionalQueryParams,
137+
additionalHeaders,
138+
additionalBodyProperties,
139+
)
140+
}
141+
142+
override fun toString() =
143+
"CardSearchByPanParams{pan=$pan, additionalQueryParams=$additionalQueryParams, additionalHeaders=$additionalHeaders, additionalBodyProperties=$additionalBodyProperties}"
144+
145+
fun toBuilder() = Builder().from(this)
146+
147+
companion object {
148+
149+
@JvmStatic fun builder() = Builder()
150+
}
151+
152+
@NoAutoDetect
153+
class Builder {
154+
155+
private var pan: String? = null
156+
private var additionalQueryParams: MutableMap<String, MutableList<String>> = mutableMapOf()
157+
private var additionalHeaders: MutableMap<String, MutableList<String>> = mutableMapOf()
158+
private var additionalBodyProperties: MutableMap<String, JsonValue> = mutableMapOf()
159+
160+
@JvmSynthetic
161+
internal fun from(cardSearchByPanParams: CardSearchByPanParams) = apply {
162+
this.pan = cardSearchByPanParams.pan
163+
additionalQueryParams(cardSearchByPanParams.additionalQueryParams)
164+
additionalHeaders(cardSearchByPanParams.additionalHeaders)
165+
additionalBodyProperties(cardSearchByPanParams.additionalBodyProperties)
166+
}
167+
168+
/** The PAN for the card being retrieved. */
169+
fun pan(pan: String) = apply { this.pan = pan }
170+
171+
fun additionalQueryParams(additionalQueryParams: Map<String, List<String>>) = apply {
172+
this.additionalQueryParams.clear()
173+
putAllQueryParams(additionalQueryParams)
174+
}
175+
176+
fun putQueryParam(name: String, value: String) = apply {
177+
this.additionalQueryParams.getOrPut(name) { mutableListOf() }.add(value)
178+
}
179+
180+
fun putQueryParams(name: String, values: Iterable<String>) = apply {
181+
this.additionalQueryParams.getOrPut(name) { mutableListOf() }.addAll(values)
182+
}
183+
184+
fun putAllQueryParams(additionalQueryParams: Map<String, Iterable<String>>) = apply {
185+
additionalQueryParams.forEach(this::putQueryParams)
186+
}
187+
188+
fun removeQueryParam(name: String) = apply {
189+
this.additionalQueryParams.put(name, mutableListOf())
190+
}
191+
192+
fun additionalHeaders(additionalHeaders: Map<String, Iterable<String>>) = apply {
193+
this.additionalHeaders.clear()
194+
putAllHeaders(additionalHeaders)
195+
}
196+
197+
fun putHeader(name: String, value: String) = apply {
198+
this.additionalHeaders.getOrPut(name) { mutableListOf() }.add(value)
199+
}
200+
201+
fun putHeaders(name: String, values: Iterable<String>) = apply {
202+
this.additionalHeaders.getOrPut(name) { mutableListOf() }.addAll(values)
203+
}
204+
205+
fun putAllHeaders(additionalHeaders: Map<String, Iterable<String>>) = apply {
206+
additionalHeaders.forEach(this::putHeaders)
207+
}
208+
209+
fun removeHeader(name: String) = apply { this.additionalHeaders.put(name, mutableListOf()) }
210+
211+
fun additionalBodyProperties(additionalBodyProperties: Map<String, JsonValue>) = apply {
212+
this.additionalBodyProperties.clear()
213+
this.additionalBodyProperties.putAll(additionalBodyProperties)
214+
}
215+
216+
fun putAdditionalBodyProperty(key: String, value: JsonValue) = apply {
217+
this.additionalBodyProperties.put(key, value)
218+
}
219+
220+
fun putAllAdditionalBodyProperties(additionalBodyProperties: Map<String, JsonValue>) =
221+
apply {
222+
this.additionalBodyProperties.putAll(additionalBodyProperties)
223+
}
224+
225+
fun build(): CardSearchByPanParams =
226+
CardSearchByPanParams(
227+
checkNotNull(pan) { "`pan` is required but was not set" },
228+
additionalQueryParams.mapValues { it.value.toUnmodifiable() }.toUnmodifiable(),
229+
additionalHeaders.mapValues { it.value.toUnmodifiable() }.toUnmodifiable(),
230+
additionalBodyProperties.toUnmodifiable(),
231+
)
232+
}
233+
}

lithic-java-core/src/main/kotlin/com/lithic/api/services/async/CardServiceAsync.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.lithic.api.models.CardReissueParams
1818
import com.lithic.api.models.CardRenewParams
1919
import com.lithic.api.models.CardRetrieveParams
2020
import com.lithic.api.models.CardRetrieveSpendLimitsParams
21+
import com.lithic.api.models.CardSearchByPanParams
2122
import com.lithic.api.models.CardSpendLimits
2223
import com.lithic.api.models.CardUpdateParams
2324
import com.lithic.api.services.async.cards.AggregateBalanceServiceAsync
@@ -148,6 +149,18 @@ interface CardServiceAsync {
148149
requestOptions: RequestOptions = RequestOptions.none()
149150
): CompletableFuture<CardSpendLimits>
150151

152+
/**
153+
* Get card configuration such as spend limit and state. Customers must be PCI compliant to use
154+
* this endpoint. Please contact [support@lithic.com](mailto:support@lithic.com) for questions.
155+
* _Note: this is a `POST` endpoint because it is more secure to send sensitive data in a
156+
* request body than in a URL._
157+
*/
158+
@JvmOverloads
159+
fun searchByPan(
160+
params: CardSearchByPanParams,
161+
requestOptions: RequestOptions = RequestOptions.none()
162+
): CompletableFuture<Card>
163+
151164
fun getEmbedHtml(
152165
params: CardGetEmbedHtmlParams,
153166
requestOptions: RequestOptions = RequestOptions.none()

lithic-java-core/src/main/kotlin/com/lithic/api/services/async/CardServiceAsyncImpl.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.lithic.api.models.CardReissueParams
2121
import com.lithic.api.models.CardRenewParams
2222
import com.lithic.api.models.CardRetrieveParams
2323
import com.lithic.api.models.CardRetrieveSpendLimitsParams
24+
import com.lithic.api.models.CardSearchByPanParams
2425
import com.lithic.api.models.CardSpendLimits
2526
import com.lithic.api.models.CardUpdateParams
2627
import com.lithic.api.services.async.cards.AggregateBalanceServiceAsync
@@ -368,6 +369,40 @@ constructor(
368369
}
369370
}
370371

372+
private val searchByPanHandler: Handler<Card> =
373+
jsonHandler<Card>(clientOptions.jsonMapper).withErrorHandler(errorHandler)
374+
375+
/**
376+
* Get card configuration such as spend limit and state. Customers must be PCI compliant to use
377+
* this endpoint. Please contact [support@lithic.com](mailto:support@lithic.com) for questions.
378+
* _Note: this is a `POST` endpoint because it is more secure to send sensitive data in a
379+
* request body than in a URL._
380+
*/
381+
override fun searchByPan(
382+
params: CardSearchByPanParams,
383+
requestOptions: RequestOptions
384+
): CompletableFuture<Card> {
385+
val request =
386+
HttpRequest.builder()
387+
.method(HttpMethod.POST)
388+
.addPathSegments("cards", "search_by_pan")
389+
.putAllQueryParams(params.getQueryParams())
390+
.putAllHeaders(clientOptions.headers)
391+
.putAllHeaders(params.getHeaders())
392+
.body(json(clientOptions.jsonMapper, params.getBody()))
393+
.build()
394+
return clientOptions.httpClient.executeAsync(request, requestOptions).thenApply { response
395+
->
396+
response
397+
.use { searchByPanHandler.handle(it) }
398+
.apply {
399+
if (requestOptions.responseValidation ?: clientOptions.responseValidation) {
400+
validate()
401+
}
402+
}
403+
}
404+
}
405+
371406
override fun getEmbedHtml(
372407
params: CardGetEmbedHtmlParams,
373408
requestOptions: RequestOptions

lithic-java-core/src/main/kotlin/com/lithic/api/services/blocking/CardService.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.lithic.api.models.CardReissueParams
1818
import com.lithic.api.models.CardRenewParams
1919
import com.lithic.api.models.CardRetrieveParams
2020
import com.lithic.api.models.CardRetrieveSpendLimitsParams
21+
import com.lithic.api.models.CardSearchByPanParams
2122
import com.lithic.api.models.CardSpendLimits
2223
import com.lithic.api.models.CardUpdateParams
2324
import com.lithic.api.services.blocking.cards.AggregateBalanceService
@@ -144,6 +145,18 @@ interface CardService {
144145
requestOptions: RequestOptions = RequestOptions.none()
145146
): CardSpendLimits
146147

148+
/**
149+
* Get card configuration such as spend limit and state. Customers must be PCI compliant to use
150+
* this endpoint. Please contact [support@lithic.com](mailto:support@lithic.com) for questions.
151+
* _Note: this is a `POST` endpoint because it is more secure to send sensitive data in a
152+
* request body than in a URL._
153+
*/
154+
@JvmOverloads
155+
fun searchByPan(
156+
params: CardSearchByPanParams,
157+
requestOptions: RequestOptions = RequestOptions.none()
158+
): Card
159+
147160
fun getEmbedHtml(
148161
params: CardGetEmbedHtmlParams,
149162
requestOptions: RequestOptions = RequestOptions.none()

lithic-java-core/src/main/kotlin/com/lithic/api/services/blocking/CardServiceImpl.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.lithic.api.models.CardReissueParams
2121
import com.lithic.api.models.CardRenewParams
2222
import com.lithic.api.models.CardRetrieveParams
2323
import com.lithic.api.models.CardRetrieveSpendLimitsParams
24+
import com.lithic.api.models.CardSearchByPanParams
2425
import com.lithic.api.models.CardSpendLimits
2526
import com.lithic.api.models.CardUpdateParams
2627
import com.lithic.api.services.blocking.cards.AggregateBalanceService
@@ -336,6 +337,36 @@ constructor(
336337
}
337338
}
338339

340+
private val searchByPanHandler: Handler<Card> =
341+
jsonHandler<Card>(clientOptions.jsonMapper).withErrorHandler(errorHandler)
342+
343+
/**
344+
* Get card configuration such as spend limit and state. Customers must be PCI compliant to use
345+
* this endpoint. Please contact [support@lithic.com](mailto:support@lithic.com) for questions.
346+
* _Note: this is a `POST` endpoint because it is more secure to send sensitive data in a
347+
* request body than in a URL._
348+
*/
349+
override fun searchByPan(params: CardSearchByPanParams, requestOptions: RequestOptions): Card {
350+
val request =
351+
HttpRequest.builder()
352+
.method(HttpMethod.POST)
353+
.addPathSegments("cards", "search_by_pan")
354+
.putAllQueryParams(params.getQueryParams())
355+
.putAllHeaders(clientOptions.headers)
356+
.putAllHeaders(params.getHeaders())
357+
.body(json(clientOptions.jsonMapper, params.getBody()))
358+
.build()
359+
return clientOptions.httpClient.execute(request, requestOptions).let { response ->
360+
response
361+
.use { searchByPanHandler.handle(it) }
362+
.apply {
363+
if (requestOptions.responseValidation ?: clientOptions.responseValidation) {
364+
validate()
365+
}
366+
}
367+
}
368+
}
369+
339370
override fun getEmbedHtml(
340371
params: CardGetEmbedHtmlParams,
341372
requestOptions: RequestOptions

0 commit comments

Comments
 (0)