Zkopírovat odkaz na sekciProductVisibilityResolver
Zkopírovat odkaz na sekciCo 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 resolveru
- ProductVisibilityResolverImpl — výchozí implementace pravidel
- ProductVisibilityService — služba, která resolver používá pro hromadné zpracování
Zkopírovat odkaz na sekciProč 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í.
Zkopírovat odkaz na sekciVýchozí chování (ProductVisibilityResolverImpl)
Výchozí resolver implementuje tato pravidla:
- Produkty se status = TRASHED nebo PRIVATE jsou 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 defaultem INVISIBLE, 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)).
- 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á.
Zkopírovat odkaz na sekciJak 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
1 import com.fg.cps.eshop.product.service.ProductVisibilityResolver;2import com.fg.cps.eshop.product.service.ProductVisibilityResolverImpl; // jen pro inspiraci signaturou3 4public class CustomProductVisibilityResolver implements ProductVisibilityResolver {5 @Override6 public CatalogEntityVisibility getMasterProductVisibility(@NonNull Product master) {7 // vaše pravidla8 }9 10 @Override11 public CatalogEntityVisibility getProductVisibility(@NonNull Product product) {12 // vaše pravidla13 }14}
- Konfigurační třída s @Bean
1 import org.springframework.context.annotation.Bean;2import org.springframework.context.annotation.Configuration;3import com.fg.cps.eshop.product.service.ProductVisibilityResolver;4 5@Configuration6public class ProjectSpringConfig {7 8 @Bean9 public ProductVisibilityResolver productVisibilityResolver(10 AbstractProductVariantService<Product> variantService,11 AbstractProductSetService<Product> setService12 ) {13 return new CustomProductVisibilityResolver(variantService, setService);14 }15}
Jakmile je bean ProductVisibilityResolver ve Spring kontextu, ProductVisibilityService ji automaticky použije. Není nutná žádná další konfigurace.
Zkopírovat odkaz na sekciShrnutí
- ProductVisibilityResolver je rozšiřitelné rozhraní pro obchodní pravidla viditelnosti produktů.
- Výchozí implementace ProductVisibilityResolverImpl poskytuje 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í.