Skip to content

Commit 1ac0ec2

Browse files
authored
Merge pull request #378 from Ecwid/ECWID-135161-reviews-api
ECWID-135161 Added mass update method for product reviews
2 parents 5cc2d7d + 153c037 commit 1ac0ec2

13 files changed

Lines changed: 144 additions & 25 deletions

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,11 @@ interface SlugInfoApiClient {
299299

300300
// Product reviews
301301
interface ProductReviewsApiClient {
302-
fun searchProductReviews(request: ProductReviewsSearchRequest): ProductReviewSearchResult
303-
fun searchProductReviewsAsSequence(request: ProductReviewsSearchRequest): Sequence<FetchedProductReview>
302+
fun searchProductReviews(request: ProductReviewSearchRequest): ProductReviewSearchResult
303+
fun searchProductReviewsAsSequence(request: ProductReviewSearchRequest): Sequence<FetchedProductReview>
304304
fun getProductReviewDetails(request: ProductReviewDetailsRequest): FetchedProductReview
305305
fun updateProductReviewStatus(request: ProductReviewUpdateStatusRequest): ProductReviewUpdateStatusResult
306306
fun deleteProductReview(request: ProductReviewDeleteRequest): ProductReviewDeleteResult
307+
fun massUpdateProductReview(request: ProductReviewMassUpdateRequest): ProductReviewMassUpdateResult
308+
fun getProductReviewsFiltersData(request: ProductReviewFiltersDataRequest): ProductReviewFiltersDataResult
307309
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.enums
2+
3+
enum class ProductReviewSelectMode {
4+
SELECTED,
5+
ALL_FILTERED,
6+
ALL,
7+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.request
2+
3+
import com.ecwid.apiclient.v3.dto.ApiRequest
4+
import com.ecwid.apiclient.v3.impl.RequestInfo
5+
import com.ecwid.apiclient.v3.responsefields.ResponseFields
6+
7+
data class ProductReviewFiltersDataRequest(
8+
val responseFields: ResponseFields = ResponseFields.All,
9+
) : ApiRequest {
10+
override fun toRequestInfo() = RequestInfo.createGetRequest(
11+
pathSegments = listOf(
12+
"reviews",
13+
"filters_data",
14+
),
15+
responseFields = responseFields,
16+
)
17+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.request
2+
3+
import com.ecwid.apiclient.v3.dto.common.ApiRequestDTO
4+
import com.ecwid.apiclient.v3.dto.productreview.enums.ProductReviewSelectMode
5+
import com.ecwid.apiclient.v3.dto.productreview.enums.ProductReviewStatus
6+
import java.time.Instant
7+
8+
data class ProductReviewMassUpdate(
9+
val reviewIds: List<Long>? = null,
10+
val selectMode: ProductReviewSelectMode? = null,
11+
val delete: Boolean = false,
12+
val newStatus: ProductReviewStatus? = null,
13+
val filters: Filters? = null,
14+
) : ApiRequestDTO {
15+
16+
data class Filters(
17+
val reviewId: String? = null,
18+
val productId: String? = null,
19+
val orderId: String? = null,
20+
val status: ProductReviewStatus? = null,
21+
val rating: Int? = null,
22+
val createdFrom: Instant? = null,
23+
val createdTo: Instant? = null,
24+
val searchKeyword: String? = null,
25+
)
26+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.request
2+
3+
import com.ecwid.apiclient.v3.dto.ApiRequest
4+
import com.ecwid.apiclient.v3.httptransport.HttpBody
5+
import com.ecwid.apiclient.v3.impl.RequestInfo
6+
7+
data class ProductReviewMassUpdateRequest(
8+
val updateInfo: ProductReviewMassUpdate = ProductReviewMassUpdate(),
9+
) : ApiRequest {
10+
override fun toRequestInfo() = RequestInfo.createPutRequest(
11+
pathSegments = listOf(
12+
"reviews",
13+
"mass_update",
14+
),
15+
params = mapOf(),
16+
httpBody = HttpBody.JsonBody(
17+
obj = updateInfo
18+
)
19+
)
20+
}

src/main/kotlin/com/ecwid/apiclient/v3/dto/productreview/request/ProductReviewsSearchRequest.kt renamed to src/main/kotlin/com/ecwid/apiclient/v3/dto/productreview/request/ProductReviewSearchRequest.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.ecwid.apiclient.v3.responsefields.ResponseFields
99
import java.time.Instant
1010
import java.util.concurrent.TimeUnit
1111

12-
data class ProductReviewsSearchRequest(
12+
data class ProductReviewSearchRequest(
1313
val reviewId: String? = null,
1414
val productId: String? = null,
1515
val orderId: String? = null,
@@ -19,11 +19,12 @@ data class ProductReviewsSearchRequest(
1919
val createdTo: Instant? = null,
2020
val updatedFrom: Instant? = null,
2121
val updatedTo: Instant? = null,
22+
val searchKeyword: String? = null,
2223
val sortBy: ProductReviewSortOrder? = null,
2324
val limit: Int = 100,
2425
override val offset: Int = 0,
2526
val responseFields: ResponseFields = ResponseFields.All,
26-
) : ApiRequest, PagingRequest<ProductReviewsSearchRequest> {
27+
) : ApiRequest, PagingRequest<ProductReviewSearchRequest> {
2728
override fun toRequestInfo() = RequestInfo.createGetRequest(
2829
pathSegments = listOf(
2930
"reviews"
@@ -44,6 +45,7 @@ data class ProductReviewsSearchRequest(
4445
request.createdTo?.let { put("createdTo", TimeUnit.MILLISECONDS.toSeconds(it.toEpochMilli()).toString()) }
4546
request.updatedFrom?.let { put("updatedFrom", TimeUnit.MILLISECONDS.toSeconds(it.toEpochMilli()).toString()) }
4647
request.updatedTo?.let { put("updatedTo", TimeUnit.MILLISECONDS.toSeconds(it.toEpochMilli()).toString()) }
48+
request.searchKeyword?.let { put("searchKeyword", it) }
4749
request.sortBy?.let { put("sortBy", it.name) }
4850
put("offset", request.offset.toString())
4951
put("limit", request.limit.toString())
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.result
2+
3+
import com.ecwid.apiclient.v3.dto.common.ApiResultDTO
4+
5+
data class ProductReviewFiltersDataResult(
6+
val allCount: Int = 0,
7+
val moderatedCount: Int = 0,
8+
val publishedCount: Int = 0,
9+
) : ApiResultDTO
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.result
2+
3+
import com.ecwid.apiclient.v3.dto.common.ApiResultDTO
4+
5+
data class ProductReviewMassUpdateResult(
6+
val updateCount: Int = 0
7+
) : ApiResultDTO

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import com.ecwid.apiclient.v3.dto.productreview.result.*
88
class ProductReviewsApiClientImpl(
99
private val apiClientHelper: ApiClientHelper,
1010
) : ProductReviewsApiClient {
11-
override fun searchProductReviews(request: ProductReviewsSearchRequest) =
11+
override fun searchProductReviews(request: ProductReviewSearchRequest) =
1212
apiClientHelper.makeObjectResultRequest<ProductReviewSearchResult>(request)
1313

14-
override fun searchProductReviewsAsSequence(request: ProductReviewsSearchRequest) =
14+
override fun searchProductReviewsAsSequence(request: ProductReviewSearchRequest) =
1515
apiClientHelper.makeObjectResultRequest<Sequence<FetchedProductReview>>(request)
1616

1717
override fun getProductReviewDetails(request: ProductReviewDetailsRequest) =
@@ -22,4 +22,11 @@ class ProductReviewsApiClientImpl(
2222

2323
override fun deleteProductReview(request: ProductReviewDeleteRequest) =
2424
apiClientHelper.makeObjectResultRequest<ProductReviewDeleteResult>(request)
25+
26+
override fun massUpdateProductReview(request: ProductReviewMassUpdateRequest) =
27+
apiClientHelper.makeObjectResultRequest<ProductReviewMassUpdateResult>(request)
28+
29+
override fun getProductReviewsFiltersData(request: ProductReviewFiltersDataRequest) =
30+
apiClientHelper.makeObjectResultRequest<ProductReviewFiltersDataResult>(request)
31+
2532
}

src/test/kotlin/com/ecwid/apiclient/v3/rule/NullablePropertyRules.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ val nullablePropertyRules: List<NullablePropertyRule<*, *>> = listOf(
171171
fetchedSlugInfoClassesNullablePropertyRules,
172172
slugInfoRequestNullablePropertyRules,
173173
fetchedProductReviewNullablePropertyRules,
174-
productReviewsSearchRequestNullablePropertyRules,
174+
productReviewMassUpdateRequestNullablePropertyRules,
175+
productReviewSearchRequestNullablePropertyRules,
175176
).flatten()
176177

177178
sealed class NullablePropertyRule<T, R>(

0 commit comments

Comments
 (0)