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.ShoppingListDraft;
010import com.commercetools.api.models.shopping_list.ShoppingListDraftBuilder;
011import com.commercetools.api.models.shopping_list.ShoppingListUpdate;
012import com.commercetools.api.models.shopping_list.ShoppingListUpdateAction;
013import com.commercetools.api.models.shopping_list.ShoppingListUpdateActionBuilder;
014
015public interface ByProjectKeyShoppingListsRequestBuilderMixin {
016    public ByProjectKeyShoppingListsPost post(ShoppingListDraft shoppingListDraft);
017
018    public ByProjectKeyShoppingListsByIDRequestBuilder withId(String ID);
019
020    public default ByProjectKeyShoppingListsByIDPost update(Versioned<ShoppingList> shoppingList,
021            List<ShoppingListUpdateAction> actions) {
022        return withId(shoppingList.getId())
023                .post(builder -> ShoppingListUpdate.builder().version(shoppingList.getVersion()).actions(actions));
024    }
025
026    public default ByProjectKeyShoppingListsByIDPost update(Versioned<ShoppingList> shoppingList,
027            UnaryOperator<UpdateActionBuilder<ShoppingListUpdateAction, ShoppingListUpdateActionBuilder>> op) {
028        return withId(shoppingList.getId()).post(builder -> ShoppingListUpdate.builder()
029                .version(shoppingList.getVersion())
030                .actions(op.apply(UpdateActionBuilder.of(ShoppingListUpdateActionBuilder::of)).actions));
031    }
032
033    public default WithUpdateActionBuilder<ShoppingListUpdateAction, ShoppingListUpdateActionBuilder, ByProjectKeyShoppingListsByIDPost> update(
034            Versioned<ShoppingList> shoppingList) {
035        return builder -> withId(shoppingList.getId()).post(b -> ShoppingListUpdate.builder()
036                .version(shoppingList.getVersion())
037                .actions(builder.apply(UpdateActionBuilder.of(ShoppingListUpdateActionBuilder::of)).actions));
038    }
039
040    public default ByProjectKeyShoppingListsByIDDelete delete(Versioned<ShoppingList> shoppingList) {
041        return withId(shoppingList.getId()).delete().withVersion(shoppingList.getVersion());
042    }
043
044    public default ByProjectKeyShoppingListsPost create(ShoppingListDraft shoppingListDraft) {
045        return post(shoppingListDraft);
046    }
047
048    public default ByProjectKeyShoppingListsPost create(UnaryOperator<ShoppingListDraftBuilder> op) {
049        return post(op.apply(ShoppingListDraftBuilder.of()).build());
050    }
051}