001
002package com.commercetools.api.client;
003
004import java.util.List;
005import java.util.function.UnaryOperator;
006
007import com.commercetools.api.models.Versioned;
008import com.commercetools.api.models.shopping_list.ShoppingList;
009import com.commercetools.api.models.shopping_list.ShoppingListUpdate;
010import com.commercetools.api.models.shopping_list.ShoppingListUpdateAction;
011import com.commercetools.api.models.shopping_list.ShoppingListUpdateActionBuilder;
012
013public interface ByProjectKeyInStoreKeyByStoreKeyShoppingListsRequestMixin {
014    ByProjectKeyInStoreKeyByStoreKeyShoppingListsPost post(
015            com.commercetools.api.models.shopping_list.ShoppingListDraft shoppingListDraft);
016
017    ByProjectKeyInStoreKeyByStoreKeyShoppingListsByIDRequestBuilder withId(String ID);
018
019    public default ByProjectKeyInStoreKeyByStoreKeyShoppingListsByIDPost update(Versioned<ShoppingList> shoppingList,
020            List<ShoppingListUpdateAction> actions) {
021        return withId(shoppingList.getId())
022                .post(builder -> ShoppingListUpdate.builder().version(shoppingList.getVersion()).actions(actions));
023    }
024
025    public default ByProjectKeyInStoreKeyByStoreKeyShoppingListsByIDPost update(Versioned<ShoppingList> shoppingList,
026            UnaryOperator<UpdateActionBuilder<ShoppingListUpdateAction, ShoppingListUpdateActionBuilder>> op) {
027        return withId(shoppingList.getId()).post(builder -> ShoppingListUpdate.builder()
028                .version(shoppingList.getVersion())
029                .actions(op.apply(UpdateActionBuilder.of(ShoppingListUpdateActionBuilder::of)).actions));
030    }
031
032    public default WithUpdateActionBuilder<ShoppingListUpdateAction, ShoppingListUpdateActionBuilder, ByProjectKeyInStoreKeyByStoreKeyShoppingListsByIDPost> update(
033            Versioned<ShoppingList> shoppingList) {
034        return builder -> withId(shoppingList.getId()).post(b -> ShoppingListUpdate.builder()
035                .version(shoppingList.getVersion())
036                .actions(builder.apply(UpdateActionBuilder.of(ShoppingListUpdateActionBuilder::of)).actions));
037    }
038}