Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.

Commit 37c74d0

Browse files
committed
Add store functionality to batch update orders status.
1 parent fe0b98e commit 37c74d0

File tree

1 file changed

+51
-0
lines changed
  • plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/store

1 file changed

+51
-0
lines changed

plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/store/WCOrderStore.kt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
2727
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType.API_ERROR
2828
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooResult
2929
import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.BatchOrderApiResponse
30+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.BatchOrderApiResponse.ErrorResponse
3031
import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.OrderRestClient
3132
import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.OrderRestClient.OrderBy
3233
import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.OrderRestClient.SortOrder
@@ -44,6 +45,7 @@ import org.wordpress.android.fluxc.store.WCOrderStore.OrderErrorType.PARSE_ERROR
4445
import org.wordpress.android.fluxc.store.WCOrderStore.OrderErrorType.TIMEOUT_ERROR
4546
import org.wordpress.android.fluxc.store.WCOrderStore.UpdateOrderResult.OptimisticUpdateResult
4647
import org.wordpress.android.fluxc.store.WCOrderStore.UpdateOrderResult.RemoteUpdateResult
48+
import org.wordpress.android.fluxc.store.WCOrderStore.UpdateOrdersStatusResult.FailedOrder
4749
import org.wordpress.android.fluxc.tools.CoroutineEngine
4850
import org.wordpress.android.util.AppLog
4951
import org.wordpress.android.util.AppLog.T.API
@@ -306,6 +308,18 @@ class WCOrderStore @Inject constructor(
306308
}
307309
}
308310

311+
data class UpdateOrdersStatusResult(
312+
val updatedOrders: List<Long> = emptyList(),
313+
val failedOrders: List<FailedOrder> = emptyList()
314+
) {
315+
data class FailedOrder(
316+
val id: Long,
317+
val errorCode: String,
318+
val errorMessage: String,
319+
val errorStatus: Int
320+
)
321+
}
322+
309323
data class OrderError(val type: OrderErrorType = GENERIC_ERROR, val message: String = "") : OnChangedError
310324

311325
enum class OrderErrorType {
@@ -1156,4 +1170,41 @@ class WCOrderStore @Inject constructor(
11561170
WooResult(orders)
11571171
}
11581172
}
1173+
1174+
suspend fun batchUpdateOrdersStatus(
1175+
site: SiteModel,
1176+
orderIds: List<Long>,
1177+
newStatus: String
1178+
): WooResult<UpdateOrdersStatusResult> {
1179+
val result = wcOrderRestClient.batchUpdateOrdersStatus(site, orderIds, newStatus)
1180+
1181+
return if (!result.isError) {
1182+
val orders = result.response
1183+
val updatedOrders = mutableListOf<Long>()
1184+
val failedOrders = mutableListOf<FailedOrder>()
1185+
1186+
orders.forEach { response ->
1187+
when (response) {
1188+
is BatchOrderApiResponse.OrderResponse.Success -> {
1189+
response.order.id?.let { updatedOrders.add(it) }
1190+
}
1191+
1192+
is BatchOrderApiResponse.OrderResponse.Error -> {
1193+
failedOrders.add(
1194+
FailedOrder(
1195+
id = response.id,
1196+
errorCode = response.error.code,
1197+
errorMessage = response.error.message,
1198+
errorStatus = response.error.data.status
1199+
)
1200+
)
1201+
}
1202+
}
1203+
}
1204+
1205+
WooResult(UpdateOrdersStatusResult(updatedOrders, failedOrders))
1206+
} else {
1207+
WooResult(WooError(API_ERROR, SERVER_ERROR, result.error.message))
1208+
}
1209+
}
11591210
}

0 commit comments

Comments
 (0)