ProductVisibilityResolver
Co to je a k čemu slouží
ProductVisibilityResolver je rozšiřitelné rozhraní, které zapouzdřuje obchodní pravidla pro vyhodnocování viditelnosti produktů v seznamech katalogu, feedech apod.
Resolver je používán aplikační službou ProductVisibilityService, která si jej vyžádá ze Spring kontextu. Pokud žádný vlastní resolver nenajde, použije výchozí implementaci ProductVisibilityResolverImpl.
Relevantní třídy:
ProductVisibilityResolver— rozhraní rozšiřitelného resolveruProductVisibilityResolverImpl— výchozí implementace pravidelProductVisibilityService— služba, která resolver používá pro hromadné zpracování
Proč a kdy to použít
Použijte vlastní implementaci ProductVisibilityResolver všude, kde potřebujete upravit obchodní pravidla pro vyhodnocování viditelnosti produktů. Typické scénáře:
- speciální kombinace dostupnosti a viditelnosti
- kampaňová pravidla pro viditelnost produktů
- B2B pravidla pro konkrétní zákaznické skupiny
- specifická logika pro master produkty nebo produktové sety
- vlastní způsob vyhodnocování produktů s ukončeným prodejem
Resolver se používá prostřednictvím služby ProductVisibilityService, která jej automaticky načte ze Spring kontextu. Pokud potřebujete jen použít standardní logiku, automaticky se aplikuje výchozí chování.
Výchozí chování (ProductVisibilityResolverImpl)
Výchozí resolver implementuje tato pravidla:
- Produkty se
status=TRASHEDneboPRIVATEjsou neviditelné (INVISIBLE). - Produkty s ukončeným prodejem (
Product#isHasSaleEnded() == true) jsou neviditelné. - Je-li viditelnost dostupnosti produktu (
ProductAvailability#getVisibility())INVISIBLE, produkt je neviditelný. - Jinak se použije vlastní viditelnost produktu
product.getVisibility()s defaultemINVISIBLE, pokud není nastavena. - Master produkt je viditelný pouze tehdy, pokud:
- sám není explicitně
INVISIBLE, a - existuje alespoň jedna „objevitelná/zařaditelná” varianta (
productVariantService.existsAnyDiscoverabilityVariant(masterId)).
- sám není explicitně
- U produktových setů se pro hodnocení bere dostupnost celého setu (
productSetService.getAvailabilityOfSet(product)).
Poznámka: Výchozí implementace předpokládá, že v kontextu jsou k dispozici služby variant a setů (AbstractProductVariantService, AbstractProductSetService). Pokud ve vaší instalaci chybí, zajistěte jejich přítomnost, nebo dodejte vlastní resolver, který s tím počítá.
Jak zaregistrovat vlastní implementaci
Pro použití vlastní implementace stačí zaregistrovat bean typu ProductVisibilityResolver do Spring kontextu. ProductVisibilityService automaticky najde a použije tento resolver. Pokud žádný vlastní resolver neexistuje, použije se výchozí ProductVisibilityResolverImpl.
Možnosti registrace:
- Přímá komponenta
import com.fg.cps.eshop.product.service.ProductVisibilityResolver;import com.fg.cps.eshop.product.service.ProductVisibilityResolverImpl; // jen pro inspiraci signaturou
public class CustomProductVisibilityResolver implements ProductVisibilityResolver { @Override public CatalogEntityVisibility getMasterProductVisibility(@NonNull Product master) { // vaše pravidla }
@Override public CatalogEntityVisibility getProductVisibility(@NonNull Product product) { // vaše pravidla }}- Konfigurační třída s @Bean
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.fg.cps.eshop.product.service.ProductVisibilityResolver;
@Configurationpublic class ProjectSpringConfig { @Bean public ProductVisibilityResolver productVisibilityResolver( AbstractProductVariantService<Product> variantService, AbstractProductSetService<Product> setService ) { return new CustomProductVisibilityResolver(variantService, setService); }}Jakmile je bean ProductVisibilityResolver ve Spring kontextu, ProductVisibilityService ji automaticky použije. Není nutná žádná další konfigurace.
Shrnutí
ProductVisibilityResolverje rozšiřitelné rozhraní pro obchodní pravidla viditelnosti produktů.- Výchozí implementace
ProductVisibilityResolverImplposkytuje standardní logiku. - Vlastní implementaci stačí zaregistrovat jako Spring bean — automaticky se použije místo výchozí.
- Resolver se používá prostřednictvím
ProductVisibilityService, která zajišťuje orchestraci a hromadné zpracování.
