Skip to content

Commit d2e53de

Browse files
committed
ECWID-142216 - add generic method to use searchOrders
1 parent b0d02d5 commit d2e53de

4 files changed

Lines changed: 46 additions & 18 deletions

File tree

src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -136,23 +136,6 @@ open class ApiClient private constructor(
136136
}
137137
}
138138

139-
// Orders
140-
// https://developers.ecwid.com/api-documentation/orders
141-
interface OrdersApiClient {
142-
fun searchOrders(request: OrdersSearchRequest): OrdersSearchResult
143-
fun searchOrdersAsSequence(request: OrdersSearchRequest): Sequence<FetchedOrder>
144-
fun getOrderDetails(request: OrderDetailsRequest): FetchedOrder
145-
fun getOrderInvoice(request: OrderInvoiceRequest): String
146-
fun createOrder(request: OrderCreateRequest): OrderCreateResult
147-
fun updateOrder(request: OrderUpdateRequest): OrderUpdateResult
148-
fun deleteOrder(request: OrderDeleteRequest): OrderDeleteResult
149-
fun uploadOrderItemOptionFile(request: OrderItemOptionFileUploadRequest): OrderItemOptionFileUploadResult
150-
fun deleteOrderItemOptionFile(request: OrderItemOptionFileDeleteRequest): OrderItemOptionFileDeleteResult
151-
fun deleteOrderItemOptionFiles(request: OrderItemOptionFilesDeleteRequest): OrderItemOptionFileDeleteResult
152-
fun searchDeletedOrders(request: DeletedOrdersSearchRequest): DeletedOrdersSearchResult
153-
fun searchDeletedOrdersAsSequence(request: DeletedOrdersSearchRequest): Sequence<DeletedOrder>
154-
}
155-
156139
// Product types
157140
// https://developers.ecwid.com/api-documentation/product-types
158141
interface ProductTypesApiClient {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.ecwid.apiclient.v3
2+
3+
import com.ecwid.apiclient.v3.dto.common.PartialResult
4+
import com.ecwid.apiclient.v3.dto.order.request.*
5+
import com.ecwid.apiclient.v3.dto.order.result.*
6+
import kotlin.reflect.KClass
7+
8+
// Orders
9+
// https://developers.ecwid.com/api-documentation/orders
10+
interface OrdersApiClient {
11+
fun searchOrders(request: OrdersSearchRequest): OrdersSearchResult
12+
fun <Result> searchOrders(request: OrdersSearchRequest, resultClass: KClass<Result>): Result
13+
where Result : PartialResult<OrdersSearchResult>
14+
fun searchOrdersAsSequence(request: OrdersSearchRequest): Sequence<FetchedOrder>
15+
fun getOrderDetails(request: OrderDetailsRequest): FetchedOrder
16+
fun getOrderInvoice(request: OrderInvoiceRequest): String
17+
fun createOrder(request: OrderCreateRequest): OrderCreateResult
18+
fun updateOrder(request: OrderUpdateRequest): OrderUpdateResult
19+
fun deleteOrder(request: OrderDeleteRequest): OrderDeleteResult
20+
fun uploadOrderItemOptionFile(request: OrderItemOptionFileUploadRequest): OrderItemOptionFileUploadResult
21+
fun deleteOrderItemOptionFile(request: OrderItemOptionFileDeleteRequest): OrderItemOptionFileDeleteResult
22+
fun deleteOrderItemOptionFiles(request: OrderItemOptionFilesDeleteRequest): OrderItemOptionFileDeleteResult
23+
fun searchDeletedOrders(request: DeletedOrdersSearchRequest): DeletedOrdersSearchResult
24+
fun searchDeletedOrdersAsSequence(request: DeletedOrdersSearchRequest): Sequence<DeletedOrder>
25+
}
26+
27+
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
28+
inline fun <reified Result : PartialResult<OrdersSearchResult>> OrdersApiClient.searchOrders(request: OrdersSearchRequest): Result {
29+
return searchOrders(request, Result::class)
30+
}

src/main/kotlin/com/ecwid/apiclient/v3/dto/order/result/FetchedOrder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ecwid.apiclient.v3.dto.order.result
22

33
import com.ecwid.apiclient.v3.dto.common.ApiFetchedDTO
4+
import com.ecwid.apiclient.v3.dto.common.ApiResultDTO
45
import com.ecwid.apiclient.v3.dto.common.ApiFetchedDTO.ModifyKind
56
import com.ecwid.apiclient.v3.dto.common.ExtendedOrderTax
67
import com.ecwid.apiclient.v3.dto.common.OrderedStringToListStringMap
@@ -119,7 +120,7 @@ data class FetchedOrder(
119120
val loyalty: Loyalty? = null,
120121
val customerFiscalCode: String? = null,
121122

122-
) : ApiFetchedDTO {
123+
) : ApiFetchedDTO, ApiResultDTO {
123124

124125
data class CreditCardStatus(
125126
val avsMessage: String? = null,

src/main/kotlin/com/ecwid/apiclient/v3/impl/OrdersApiClientImpl.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@ package com.ecwid.apiclient.v3.impl
22

33
import com.ecwid.apiclient.v3.ApiClientHelper
44
import com.ecwid.apiclient.v3.OrdersApiClient
5+
import com.ecwid.apiclient.v3.dto.category.request.CategoriesSearchRequest
6+
import com.ecwid.apiclient.v3.dto.category.result.CategoriesSearchResult
7+
import com.ecwid.apiclient.v3.dto.common.PartialResult
58
import com.ecwid.apiclient.v3.dto.order.request.*
69
import com.ecwid.apiclient.v3.dto.order.result.*
710
import com.ecwid.apiclient.v3.responsefields.AS_SEQUENCE_SEARCH_RESULT_REQUIRED_FIELDS
11+
import kotlin.reflect.KClass
812

913
internal class OrdersApiClientImpl(
1014
private val apiClientHelper: ApiClientHelper
@@ -13,6 +17,16 @@ internal class OrdersApiClientImpl(
1317
override fun searchOrders(request: OrdersSearchRequest) =
1418
apiClientHelper.makeObjectResultRequest<OrdersSearchResult>(request)
1519

20+
override fun <Result : PartialResult<OrdersSearchResult>> searchOrders(
21+
request: OrdersSearchRequest,
22+
resultClass: KClass<Result>
23+
): Result {
24+
return apiClientHelper.makeObjectPartialResultRequest(
25+
request = request,
26+
resultClass = resultClass,
27+
)
28+
}
29+
1630
override fun searchOrdersAsSequence(request: OrdersSearchRequest) = sequence {
1731
var offsetRequest = request.copy(
1832
responseFields = request.responseFields + AS_SEQUENCE_SEARCH_RESULT_REQUIRED_FIELDS

0 commit comments

Comments
 (0)