Skip to content

Commit 977df11

Browse files
committed
Merge remote-tracking branch 'origin/master' into ECWID-134924
2 parents ab2c57c + 880278d commit 977df11

18 files changed

Lines changed: 309 additions & 3 deletions

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import com.ecwid.apiclient.v3.dto.instantsite.redirects.request.*
2525
import com.ecwid.apiclient.v3.dto.instantsite.redirects.result.*
2626
import com.ecwid.apiclient.v3.dto.order.request.*
2727
import com.ecwid.apiclient.v3.dto.order.result.*
28+
import com.ecwid.apiclient.v3.dto.productreview.request.*
29+
import com.ecwid.apiclient.v3.dto.productreview.result.*
2830
import com.ecwid.apiclient.v3.dto.producttype.request.*
2931
import com.ecwid.apiclient.v3.dto.producttype.result.*
3032
import com.ecwid.apiclient.v3.dto.report.request.ReportRequest
@@ -64,6 +66,7 @@ open class ApiClient private constructor(
6466
subscriptionsApiClient: SubscriptionsApiClientImpl,
6567
instantSiteRedirectsApiClient: InstantSiteRedirectsApiClientImpl,
6668
slugInfoApiClient: SlugInfoApiClientImpl,
69+
productReviewsApiClient: ProductReviewsApiClientImpl,
6770
) :
6871
StoreProfileApiClient by storeProfileApiClient,
6972
ProductsApiClient by productsApiClient,
@@ -82,7 +85,8 @@ open class ApiClient private constructor(
8285
ReportsApiClient by reportsApiClient,
8386
SubscriptionsApiClient by subscriptionsApiClient,
8487
InstantSiteRedirectsApiClient by instantSiteRedirectsApiClient,
85-
SlugInfoApiClient by slugInfoApiClient {
88+
SlugInfoApiClient by slugInfoApiClient,
89+
ProductReviewsApiClient by productReviewsApiClient {
8690

8791
constructor(apiClientHelper: ApiClientHelper) : this(
8892
apiClientHelper = apiClientHelper,
@@ -104,6 +108,7 @@ open class ApiClient private constructor(
104108
subscriptionsApiClient = SubscriptionsApiClientImpl(apiClientHelper),
105109
instantSiteRedirectsApiClient = InstantSiteRedirectsApiClientImpl(apiClientHelper),
106110
slugInfoApiClient = SlugInfoApiClientImpl(apiClientHelper),
111+
productReviewsApiClient = ProductReviewsApiClientImpl(apiClientHelper),
107112
)
108113

109114
companion object {
@@ -291,3 +296,12 @@ interface InstantSiteRedirectsApiClient {
291296
interface SlugInfoApiClient {
292297
fun getSlugInfo(request: SlugInfoRequest): FetchedSlugInfo
293298
}
299+
300+
// Product reviews
301+
interface ProductReviewsApiClient {
302+
fun searchProductReviews(request: ProductReviewsSearchRequest): ProductReviewSearchResult
303+
fun searchProductReviewsAsSequence(request: ProductReviewsSearchRequest): Sequence<FetchedProductReview>
304+
fun getProductReviewDetails(request: ProductReviewDetailsRequest): FetchedProductReview
305+
fun updateProductReviewStatus(request: ProductReviewUpdateStatusRequest): ProductReviewUpdateStatusResult
306+
fun deleteProductReview(request: ProductReviewDeleteRequest): ProductReviewDeleteResult
307+
}
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.enums
2+
3+
@Suppress("unused")
4+
enum class ProductReviewSortOrder {
5+
DATE_CREATED_ASC,
6+
DATE_CREATED_DESC,
7+
RATING_ASC,
8+
RATING_DESC,
9+
}
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+
@Suppress("unused")
4+
enum class ProductReviewStatus {
5+
MODERATED,
6+
PUBLISHED,
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
6+
data class ProductReviewDeleteRequest(
7+
val reviewId: Int = 0
8+
) : ApiRequest {
9+
override fun toRequestInfo() = RequestInfo.createDeleteRequest(
10+
pathSegments = listOf(
11+
"reviews",
12+
"$reviewId"
13+
)
14+
)
15+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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 ProductReviewDetailsRequest(
8+
val reviewId: Int = 0,
9+
val responseFields: ResponseFields = ResponseFields.All,
10+
) : ApiRequest {
11+
override fun toRequestInfo() = RequestInfo.createGetRequest(
12+
pathSegments = listOf(
13+
"reviews",
14+
"$reviewId"
15+
),
16+
responseFields = responseFields,
17+
)
18+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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 ProductReviewUpdateStatusRequest(
8+
val reviewId: Int = 0,
9+
val status: UpdatedProductReviewStatus = UpdatedProductReviewStatus(),
10+
) : ApiRequest {
11+
override fun toRequestInfo() = RequestInfo.createPutRequest(
12+
pathSegments = listOf(
13+
"reviews",
14+
"$reviewId",
15+
),
16+
params = mapOf(),
17+
httpBody = HttpBody.JsonBody(
18+
obj = status
19+
)
20+
)
21+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.request
2+
3+
import com.ecwid.apiclient.v3.dto.ApiRequest
4+
import com.ecwid.apiclient.v3.dto.common.PagingRequest
5+
import com.ecwid.apiclient.v3.dto.productreview.enums.ProductReviewSortOrder
6+
import com.ecwid.apiclient.v3.dto.productreview.enums.ProductReviewStatus
7+
import com.ecwid.apiclient.v3.impl.RequestInfo
8+
import com.ecwid.apiclient.v3.responsefields.ResponseFields
9+
import java.time.Instant
10+
11+
data class ProductReviewsSearchRequest(
12+
val reviewId: String? = null,
13+
val productId: String? = null,
14+
val orderId: String? = null,
15+
val status: ProductReviewStatus? = null,
16+
val rating: Int? = null,
17+
val createdFrom: Instant? = null,
18+
val createdTo: Instant? = null,
19+
val updatedFrom: Instant? = null,
20+
val updatedTo: Instant? = null,
21+
val sortBy: ProductReviewSortOrder? = null,
22+
val limit: Int = 100,
23+
override val offset: Int = 0,
24+
val responseFields: ResponseFields = ResponseFields.All,
25+
) : ApiRequest, PagingRequest<ProductReviewsSearchRequest> {
26+
override fun toRequestInfo() = RequestInfo.createGetRequest(
27+
pathSegments = listOf(
28+
"reviews"
29+
),
30+
params = toParams(),
31+
responseFields = responseFields,
32+
)
33+
34+
private fun toParams(): Map<String, String> {
35+
val request = this
36+
return mutableMapOf<String, String>().apply {
37+
request.reviewId?.let { put("reviewId", it) }
38+
request.productId?.let { put("productId", it) }
39+
request.orderId?.let { put("orderId", it) }
40+
request.status?.let { put("status", it.toString()) }
41+
request.rating?.let { put("rating", it.toString()) }
42+
request.createdFrom?.let { put("createdFrom", it.toString()) }
43+
request.createdTo?.let { put("createdTo", it.toString()) }
44+
request.updatedFrom?.let { put("updatedFrom", it.toString()) }
45+
request.updatedTo?.let { put("updatedTo", it.toString()) }
46+
request.sortBy?.let { put("sortBy", it.name) }
47+
put("offset", request.offset.toString())
48+
put("limit", request.limit.toString())
49+
}.toMap()
50+
}
51+
52+
override fun copyWithOffset(offset: Int) = copy(offset = offset)
53+
54+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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.ProductReviewStatus
5+
6+
data class UpdatedProductReviewStatus(
7+
val status: ProductReviewStatus? = null
8+
) : ApiRequestDTO
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.ecwid.apiclient.v3.dto.productreview.result
2+
3+
import com.ecwid.apiclient.v3.dto.common.ApiFetchedDTO
4+
import com.ecwid.apiclient.v3.dto.common.ApiResultDTO
5+
import com.ecwid.apiclient.v3.dto.productreview.enums.ProductReviewStatus
6+
import java.util.*
7+
8+
data class FetchedProductReview(
9+
val id: Long? = null,
10+
val productId: Long? = null,
11+
val productName: String? = null,
12+
val customerId: Long? = null,
13+
val orderId: Long? = null,
14+
val orderNumber: String? = null,
15+
val orderItemId: Long? = null,
16+
val status: ProductReviewStatus? = null,
17+
val rating: Int? = null,
18+
val review: String? = null,
19+
val reviewerInfo: FetchedProductReviewerInfo? = null,
20+
val createDate: Date? = null,
21+
val updateDate: Date? = null,
22+
val createTimestamp: Long? = null,
23+
val updateTimestamp: Long? = null,
24+
) : ApiFetchedDTO, ApiResultDTO {
25+
26+
override fun getModifyKind() =
27+
ApiFetchedDTO.ModifyKind.ReadOnly
28+
29+
data class FetchedProductReviewerInfo(
30+
val name: String? = null,
31+
val email: String? = null,
32+
val city: String? = null,
33+
val country: String? = null,
34+
val ordersCount: Int? = null,
35+
)
36+
37+
}
38+
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 ProductReviewDeleteResult(
6+
val deleteCount: Int = 0
7+
) : ApiResultDTO

0 commit comments

Comments
 (0)