Nákupní košík

Nákupní košík

Nákupní košík je reprezentován entitou ShoppingCart. Jedná se o standardní ADAM entitu.

Košík je vždy specifický pro:

  • katalog,
  • zákazníka (přihlášeného nebo anonymního),
  • měnu,
  • a zemi.

Pro tuto kombinaci existuje vždy pouze jeden košík. To znamená, že buď se košík vrátí pro tuto kombinaci nebo se vytvoří nový.

Pro manipulaci s košíkem slouží ShoppingCartService.

Proces aktualizace košíku je popsán zde.

Košík je rozšiřitelný pomocí traitů, viz ShoppingCartModelDescriptor.

Zkopírovat odkaz na sekciCartData

Košík také obsahuje data, která zahrnují veškeré informace týkající se obsahu košíku, jako jsou položky, způsob doručení, platba, uplatněné cenové politiky atd. CartData je ukládána do databáze ve formátu JSON.

Zkopírovat odkaz na sekciRozšíření dat nákupního košíku o další atributy

CartData je možné rozšiřovat pomocí traitů. Tyto traity podporují také traitInitCallback.

Příklad:

java
1 cartDataModelDescriptor.addTrait(CustomCartData.class);

CartData obsahuje vnořená data, která jsou rovněž rozšiřitelná pomocí traitů. Konkrétně se jedná o:

Pro tyto vlastnosti však traitInitCallback není podporován (z technických i výkonnostních důvodů).

Vytváření těchto rozšiřitelných vnořených dat je nutné provádět pomocí odpovídajících metod na cartContextu, který zajistí jejich správnou inicializaci.

Příklad:

java
1 CartItem cartItem = cartContext.createCartItem(productCode, orderedQuantity);

Registraci traitů zajišťuje CartDataModelDescriptor, který lze získat ze spring-contextu nebo z OrderFeature.

Příklad:

java
1 cartDataModelDescriptor.addTraitForBundle(CartItem.class, CustomCartItem.class);

Zkopírovat odkaz na sekciCartContext

Jedná se o kontext, který je nezbytný pro práci s košíkem. Veškeré operace s košíkem by měly být prováděny v rámci metody ShoppingCartService#doWithCartContext. Tato metoda zajistí inicializaci kontextu, cachování a následné uvolnění.

CartContext lze získat metodou ShoppingCartService#getCartContext.

Kontext lze rozšiřovat pomocí traitů. Příkladem rozšíření je CartContextWithShipping.

Příklad registrace traitu:

java
1 @Override2public void prepareStart(AbstractRefreshableApplicationContext moduleContext) {3    super.prepareStart(moduleContext);4
5    final OrderFeature orderFeature = getFeature(module, OrderFeature.class);6    final ModelClassDescriptor cartContextModelDescriptor = orderFeature.getCartContextModelDescriptor();7    cartContextModelDescriptor.addTrait(CartContextWithShipping.class);8}

Zkopírovat odkaz na sekciCartMessage

CartMessage jsou zprávy, které která zákazníka informují o různých okolnostech, které se týkají jeho košíku. Každá zpráva má svůj typ, který určuje, jak bude zpráva zobrazena. Dále obsahuje kód zprávy a případně parametry, které se do zprávy dosadí.

Výchozí seznam zpráv je zde

Zkopírovat odkaz na sekciProjektové rozšíření

Projektově lze přidávat vlastní zprávy. K tomu je nutné definovat projektovou com.fg.cps.eshop.cart.dto.CartMessageFactory a tu staticky zaregistrovat.

Příklad:

java
1 public class CustomCartMessageFactory extends CartMessageFactory {2    public static final String CUSTOM_MESSAGE = "cart.customValidationMessage";3
4    @Message(5            code = CUSTOM_MESSAGE,6            description = "Custom message for cart validation.",7            messageArgs = {8                    @MessageArg(description = "První argument."),9                    @MessageArg(description = "Druhý argument.")10            }11    )12    public static CartMessage createCustomMessage(String argument0, String argument1) {13        return createCartMessage(MessageType.ERROR, CUSTOM_MESSAGE, argument0, argument1);14    }15}16
17static {18	// Registrace factory např. v rámci project feature19	registerFactory(DefaultCartMessageFactory.class);20}