@@ -27,6 +27,7 @@ import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
2727import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType.API_ERROR
2828import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooResult
2929import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.BatchOrderApiResponse
30+ import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.BatchOrderApiResponse.ErrorResponse
3031import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.OrderRestClient
3132import org.wordpress.android.fluxc.network.rest.wpcom.wc.order.OrderRestClient.OrderBy
3233import 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
4445import org.wordpress.android.fluxc.store.WCOrderStore.OrderErrorType.TIMEOUT_ERROR
4546import org.wordpress.android.fluxc.store.WCOrderStore.UpdateOrderResult.OptimisticUpdateResult
4647import org.wordpress.android.fluxc.store.WCOrderStore.UpdateOrderResult.RemoteUpdateResult
48+ import org.wordpress.android.fluxc.store.WCOrderStore.UpdateOrdersStatusResult.FailedOrder
4749import org.wordpress.android.fluxc.tools.CoroutineEngine
4850import org.wordpress.android.util.AppLog
4951import 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