Broadleaf Microservices
  • v1.0.0-latest-prod

Offer Release Notes for 3.0.5

Important Updates

Spring Boot Upgrade

  • As of Broadleaf Release Train 2.0.4-GA, all microservices have been upgraded to Spring Boot 3.3.

New Features & Notable Changes

  • Added support for qualifying multiple voucher offers per order if it’s unlimited

  • Added support for cart subtotal threshold based Free Gift offers without any qualifier criteria

  • Allow the selection of BUNDLE typed products for Free Gift offers

    • This is to support a more dynamic setup for Free Gift offers, e.g. a bundle product that consists of 2 itemA and 3 itemB can be used solely for the purpose of being free gifts, while the bundle product itself cannot be individually sold nor searchable

  • Adds the option of an Offer which has an item associated with it. Unlike a Free Gift, this will have a cost but it should be at a reduced price from the original price.

Cache Invalidation

  • Added a OfferCachePropertiesEnvironmentPostProcessor to support automatically registering message binding properties if the cache invalidation enabled property is set as a JVM property, and has a value of true.

    • See Cache Invalidation in the Offer configuration docs for details on how to configure this feature and for the full list of configurable properties.

  • Additionally, this change removes and updates some of our Beans in the Order Services to better follow configuration patterns and resolve issues that prevented CamelClusterService from working correctly. The previous configuration pattern negatively affected message retries. See the table in the collapsed block below:

    Details
    Class Bean Change

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationDomainMapperManagerSupplier

    Removed as it was a supplier bean

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationNotificationManagerSupplier

    Removed as it was a supplier bean

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationIgnoredRepositoriesSupplier

    Removed as it was a supplier bean

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationNotificationStateRepositoriesSupplier

    Removed as it was a supplier bean

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationNotificationHandler

    Update arguments from ()

                (PromotionCacheInvalidationProducer producer,
                PromotionCacheInvalidationMessagingProperties properties,
                List<IgnoredNotificationStateRepository> ignoredRepositories,
                @Qualifier("promotionCacheInvalidationMessageFactory") MessageFactory<PromotionCacheInvalidationRemoteEvent> promotionCacheInvalidationMessageFactory,
                MessageSerializationHelper helper)

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationRetryClusterService

    Update arguments from ()

                (CamelClusterService camelClusterService,
                PromotionCacheInvalidationMessagingProperties properties,
                @Nullable List<NotificationStateRepository> repositories,
                @Qualifier("promotionCacheInvalidationNotificationHandler") NotificationHandler handler,
                List<IgnoredNotificationStateRepository> ignoredRepositories,
                @Nullable DataRouteReference reference)

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationHelper

    Update arguments from ()

                (PromotionCacheInvalidationMessagingProperties properties,
                ObjectProvider<DomainMapperManager> mapperManager)

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationNotificationStateMapperMember

    Update arguments from ()

                (NotificationStateService notificationStateService,
                @Qualifier("promotionCacheInvalidationNotificationHandler") NotificationHandler handler,
                PromotionCacheInvalidationHelper promotionCacheInvalidationHelper)

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationMessageFactory

    Update arguments from ()

                (PromotionCacheInvalidationHelper promotionCacheInvalidationHelper)

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationNotificationImmediateSender

    Update arguments from ()

                (@Qualifier("promotionCacheInvalidationMessageFactory") MessageFactory<PromotionCacheInvalidationRemoteEvent> promotionCacheInvalidationMessageFactory,
                PromotionCacheInvalidationMessagingProperties properties,
                PromotionCacheInvalidationProducer producer,
                @Qualifier("promotionCacheInvalidationNotificationStateMapperMember") PromotionCacheInvalidationNotificationStateMapperMember domainMapperMember,
                PromotionCacheInvalidationHelper promotionCacheInvalidationHelper,
                ObjectProvider<NotificationManager> notificationManager)

    PromotionCacheInvalidationMessagingConfiguration

    promotionCacheInvalidationEventListener

    Update arguments from ()

                (ObjectMapper objectMapper,
                ApplicationEventPublisher publisher)

Enhancements

  • Improve performance during the generation of offer codes in order to reduce the amount of processing needed to generate large amounts of codes.

    • This includes updating the ModelMapperMappable implementation of JpaOfferCode to perform mappings directly via a 'preconverter' instead of the previous TypeMap mappings-based approach.

    • The changes here also bypasses a slower merge() call for a faster persist() as the generated codes are always new and would not need any potential updates.

Bug fixes

  • Marketing message priority field is now honored(sorted by it) when fetching/showing messages

  • Fixed bug where 2 Free Gift offers can both be applied in the same order

    • Exposed the combinability fields for Free Gift offers and default it to OTHER_TYPES

  • Fixed issues around the usage and messaging for max usages on offers.

  • Fixed an issue where items with a sale price caused a NPE after attempting to grab information not needed for tiered candidate offers.