Skip to content

Commit

Permalink
ECWID-153684 - added new method searchBrands in API Client.
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexeyyy committed Dec 5, 2024
1 parent c01e7e2 commit c25ea96
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import com.ecwid.apiclient.v3.dto.batch.result.CancelBatchGroupResult
import com.ecwid.apiclient.v3.dto.batch.result.CreateBatchResult
import com.ecwid.apiclient.v3.dto.batch.result.GetEscapedBatchResult
import com.ecwid.apiclient.v3.dto.batch.result.GetTypedBatchResult
import com.ecwid.apiclient.v3.dto.brand.request.BrandsSearchRequest
import com.ecwid.apiclient.v3.dto.brand.result.BrandsSearchResult
import com.ecwid.apiclient.v3.dto.cart.request.*
import com.ecwid.apiclient.v3.dto.cart.result.*
import com.ecwid.apiclient.v3.dto.common.PartialResult
Expand All @@ -26,8 +28,6 @@ import com.ecwid.apiclient.v3.dto.customergroup.request.*
import com.ecwid.apiclient.v3.dto.customergroup.result.*
import com.ecwid.apiclient.v3.dto.instantsite.redirects.request.*
import com.ecwid.apiclient.v3.dto.instantsite.redirects.result.*
import com.ecwid.apiclient.v3.dto.order.request.*
import com.ecwid.apiclient.v3.dto.order.result.*
import com.ecwid.apiclient.v3.dto.productreview.request.*
import com.ecwid.apiclient.v3.dto.productreview.result.*
import com.ecwid.apiclient.v3.dto.producttype.request.*
Expand Down Expand Up @@ -55,6 +55,7 @@ import kotlin.reflect.KClass
open class ApiClient private constructor(
protected val apiClientHelper: ApiClientHelper,
storeProfileApiClient: StoreProfileApiClient,
brandsApiClient: BrandsApiClient,
productsApiClient: ProductsApiClient,
categoriesApiClient: CategoriesApiClient,
ordersApiClient: OrdersApiClient,
Expand All @@ -76,6 +77,7 @@ open class ApiClient private constructor(
storeExtrafieldsApiClient: StoreExtrafieldsApiClientImpl,
) :
StoreProfileApiClient by storeProfileApiClient,
BrandsApiClient by brandsApiClient,
ProductsApiClient by productsApiClient,
CategoriesApiClient by categoriesApiClient,
OrdersApiClient by ordersApiClient,
Expand All @@ -99,6 +101,7 @@ open class ApiClient private constructor(
constructor(apiClientHelper: ApiClientHelper) : this(
apiClientHelper = apiClientHelper,
storeProfileApiClient = StoreProfileApiClientImpl(apiClientHelper),
brandsApiClient = BrandsApiClientImpl(apiClientHelper),
productsApiClient = ProductsApiClientImpl(apiClientHelper),
categoriesApiClient = CategoriesApiClientImpl(apiClientHelper),
ordersApiClient = OrdersApiClientImpl(apiClientHelper),
Expand Down Expand Up @@ -315,3 +318,11 @@ interface ProductReviewsApiClient {
fun massUpdateProductReview(request: ProductReviewMassUpdateRequest): ProductReviewMassUpdateResult
fun getProductReviewsFiltersData(request: ProductReviewFiltersDataRequest): ProductReviewFiltersDataResult
}

// Brands
// https://api-docs.ecwid.com/reference/search-product-brands
interface BrandsApiClient {
fun searchBrands(request: BrandsSearchRequest.ByFilters): BrandsSearchResult
fun <Result> searchBrands(request: BrandsSearchRequest.ByFilters, resultClass: KClass<Result>): Result
where Result: PartialResult<BrandsSearchResult>

Check warning

Code scanning / detekt

Reports spaces around colons Warning

Missing spacing before ":"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.ecwid.apiclient.v3.dto.brand.request

import com.ecwid.apiclient.v3.dto.ApiRequest
import com.ecwid.apiclient.v3.dto.common.PagingRequest
import com.ecwid.apiclient.v3.impl.RequestInfo
import com.ecwid.apiclient.v3.responsefields.ResponseFields

sealed class BrandsSearchRequest : ApiRequest {

data class ByFilters(
val limit: Int = 100,
override val offset: Int = 0,
val lang: String? = null,
val hiddenBrands: Boolean? = null,
val baseUrl: String? = null,
val cleanUrls: Boolean? = null,
val sortBy: SortOrder? = null,
val responseFields: ResponseFields = ResponseFields.All,
) : BrandsSearchRequest(), PagingRequest<ByFilters> {
override fun toRequestInfo() = RequestInfo.createGetRequest(
pathSegments = listOf(
"brands",
),
params = toParams(),
responseFields = responseFields,
)

private fun toParams(): Map<String, String> {
val request = this
return mutableMapOf<String, String>().apply {
put("limit", request.limit.toString())
put("offset", request.offset.toString())
request.lang?.let { put("lang", it) }
request.hiddenBrands?.let { put("hiddenBrands", it.toString()) }
request.baseUrl?.let { put("baseUrl", it) }
request.cleanUrls?.let { put("cleanUrls", it.toString()) }
request.sortBy?.let { put("sortBy", it.name) }
}.toMap()
}

override fun copyWithOffset(offset: Int) = copy(offset = offset)
}

@Suppress("unused")
enum class SortOrder {
PRODUCT_COUNT_DESC,
NAME_ASC,
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.ecwid.apiclient.v3.dto.brand.result

import com.ecwid.apiclient.v3.dto.common.ApiResultDTO

data class BrandsSearchResult(
val items: List<FetchedBrand> = listOf(),
val count: Int = 0,
val total: Int = 0,
val limit: Int = 0,
val offset: Int = 0
) : ApiResultDTO
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.ecwid.apiclient.v3.dto.brand.result

import com.ecwid.apiclient.v3.dto.common.ApiFetchedDTO
import com.ecwid.apiclient.v3.dto.common.ApiResultDTO

data class FetchedBrand(
val name: String = "",
val nameTranslated: Map<String, String>? = null,
val productsFilteredByBrandUrl: String? = null,
): ApiFetchedDTO, ApiResultDTO {

Check warning

Code scanning / detekt

Reports spaces around colons Warning

Missing spacing before ":"
override fun getModifyKind() = ApiFetchedDTO.ModifyKind.ReadOnly
}
26 changes: 26 additions & 0 deletions src/main/kotlin/com/ecwid/apiclient/v3/impl/BrandsApiClientImpl.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.ecwid.apiclient.v3.impl

import com.ecwid.apiclient.v3.ApiClientHelper
import com.ecwid.apiclient.v3.BrandsApiClient
import com.ecwid.apiclient.v3.dto.brand.request.BrandsSearchRequest
import com.ecwid.apiclient.v3.dto.brand.result.BrandsSearchResult
import com.ecwid.apiclient.v3.dto.common.PartialResult
import kotlin.reflect.KClass

internal class BrandsApiClientImpl(
private val apiClientHelper: ApiClientHelper,
): BrandsApiClient {

Check warning

Code scanning / detekt

Reports spaces around colons Warning

Missing spacing before ":"

override fun searchBrands(request: BrandsSearchRequest.ByFilters) =
apiClientHelper.makeObjectResultRequest<BrandsSearchResult>(request)

override fun <Result : PartialResult<BrandsSearchResult>> searchBrands(
request: BrandsSearchRequest.ByFilters,
resultClass: KClass<Result>
): Result {
return apiClientHelper.makeObjectPartialResultRequest(
request = request,
resultClass = resultClass,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,8 @@ val nullablePropertyRules: List<NullablePropertyRule<*, *>> = listOf(
productReviewMassUpdateRequestNullablePropertyRules,
productReviewSearchRequestNullablePropertyRules,
fetchedCustomersConfigNullablePropertyRules,
brandsSearchRequestNullablePropertyRules,
fetchedBrandNullablePropertyRules,
).flatten()

sealed class NullablePropertyRule<T, R>(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ecwid.apiclient.v3.rule.nullablepropertyrules

import com.ecwid.apiclient.v3.dto.brand.request.BrandsSearchRequest
import com.ecwid.apiclient.v3.rule.NullablePropertyRule
import com.ecwid.apiclient.v3.rule.NullablePropertyRule.AllowNullable

val brandsSearchRequestNullablePropertyRules: List<NullablePropertyRule<*, *>> = listOf(
AllowNullable(BrandsSearchRequest.ByFilters::lang),
AllowNullable(BrandsSearchRequest.ByFilters::hiddenBrands),
AllowNullable(BrandsSearchRequest.ByFilters::baseUrl),
AllowNullable(BrandsSearchRequest.ByFilters::cleanUrls),
AllowNullable(BrandsSearchRequest.ByFilters::sortBy),
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.ecwid.apiclient.v3.rule.nullablepropertyrules

import com.ecwid.apiclient.v3.dto.brand.result.FetchedBrand
import com.ecwid.apiclient.v3.rule.NullablePropertyRule
import com.ecwid.apiclient.v3.rule.NullablePropertyRule.AllowNullable

val fetchedBrandNullablePropertyRules: List<NullablePropertyRule<*, *>> = listOf(
AllowNullable(FetchedBrand::nameTranslated),
AllowNullable(FetchedBrand::productsFilteredByBrandUrl),
)

0 comments on commit c25ea96

Please sign in to comment.