github i-love-flamingo/flamingo-commerce v3.13.0

2 hours ago

Highlighted release notes

cart

  • Fixed hiccups in cart merge strategies caused by the addition of payment selection from guest cart, when some items were not added to customer's cart due to errors.
  • Add effective payment method to transactions
  • GraphQL: Added the Commerce_Cart_UpdatePersonalData mutation to update the personal data of the cart
  • GraphQL: Exposed all prices on the line item level
  • Added the CartItemMatcher extension point to decide whether an add to cart request merges into an existing cart item
  • Added CustomAttributes to AppliedDiscount

product

  • GraphQL: Expose product specifications via specifications field on all product types (SimpleProduct, ConfigurableProduct, ActiveVariantProduct, BundleProduct)
  • Added Saleable model method to check saleability against a given time frame.

checkout

  • Added optional username, password and useTLS settings to the redis place order lock and context store
  • Enhanced the cancellation flow with detailed reasons threading through the place-order process
  • GraphQL: Added an optional reason argument to the Commerce_Checkout_CancelPlaceOrder mutation
  • Breaking: placeorder.Coordinator.Cancel now requires a CancellationReason argument
  • Failed and cancelled payments now fail the place order process with the fixed reasons payment process failed and payment process cancelled instead of the payment provider's error text

graphql

  • Breaking: Cart, category, checkout and customer resolvers return generic errors such as cart_general_error and log the original error. Only these messages are kept:
    • cart: item not found, delivery not found, max quantity on qty update and product validation errors on add to cart
    • checkout: ErrNoPlaceOrderProcess and the final state error on cancel
    • category: category_not_found

payment

  • Breaking: WebCartPaymentGateway.CancelOrderPayment now requires a CancellationReason argument. Added the CancellationReason type to the domain.

search

  • Added FacetMapper interface and BindMulti registry to allow custom facet types in GraphQL. Built-in facet types (ListFacet, TreeFacet, RangeFacet) are now registered as mappers.
  • Breaking: Removed SearchResultDTO.Inject. Deprecated WrapSearchResult, use SearchResultDTOFactory.NewSearchResultDTO instead.
  • SearchResult of the search application service now contains the Actions returned by the search service

sourcing

  • Extended Source model with SuppliedBy attribute

prices

  • Extended Price Context with fields From and To, meaning that this price is valid of the defined time frame.

dependencies

  • Breaking: Go 1.26 or newer is required (was 1.23)
  • Breaking: Projects with generated GraphQL code must regenerate it with gqlgen v0.17.95
  • Updated flamingo.me/graphql to v1.13.0, gqlgen to v0.17.95 and gqlparser to v2.5.59
  • Updated flamingo.me/flamingo/v3 to v3.17.4 and flamingo.me/dingo to v0.4.1. Dingo now fails at startup if modules depend on each other in a cycle.

What's Changed

  • feat(search): expose actions in the search service by @lifedraft in #634
  • chore(deps): bump github.com/go-jose/go-jose/v4 from 4.0.2 to 4.0.5 by @dependabot[bot] in #642
  • chore(deps): bump golang.org/x/net from 0.35.0 to 0.36.0 by @dependabot[bot] in #648
  • chore(deps): update flamingo version by @IvanMaidurov in #658
  • chore: migrate golangci-lint to v2 by @kgrigorev in #660
  • feat(cart): add custom attributes to applied discounts by @dylanprovost in #661
  • feat(cart): add gateway to split qualifier by @IvanMaidurov in #663
  • chore(deps): bump github.com/containerd/containerd from 1.7.18 to 1.7.27 by @dependabot[bot] in #650
  • feat(payment): distinguish between internal gateway and actual payment gateway by @IvanMaidurov in #664
  • feat(paymentselection): expose payment gateway in payment selection interface by @IvanMaidurov in #666
  • chore: revert gateway by @IvanMaidurov in #667
  • fix(cart): skip payment selection during cart merge if item addition fails by @IvanMaidurov in #669
  • feat(cart): consider effective payment method in transactions by @IvanMaidurov in #670
  • feat(checkout): add support for username,password and tls to redis by @IvanMaidurov in #671
  • chore(deps): bump github.com/docker/docker from 27.1.1+incompatible to 28.0.0+incompatible by @dependabot[bot] in #673
  • chore(deps): bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 by @dependabot[bot] in #674
  • chore(deps): update module github.com/gavv/httpexpect/v2 to v2.17.0 by @renovate[bot] in #645
  • chore(deps): update module github.com/swaggo/swag to v1.16.6 by @renovate[bot] in #675
  • chore(deps): update module github.com/gomodule/redigo to v1.9.3 by @renovate[bot] in #676
  • chore(deps): update module github.com/swaggo/swag/cmd/swag to v1.16.6 by @renovate[bot] in #677
  • chore(deps): update module flamingo.me/flamingo/v3 to v3.17.0 by @renovate[bot] in #678
  • chore(deps): update module github.com/99designs/gqlgen to v0.17.81 by @renovate[bot] in #672
  • chore(deps): update actions/checkout action to v5 by @renovate[bot] in #682
  • chore(deps): update module golang.org/x/mod to v0.29.0 by @renovate[bot] in #681
  • chore(deps): update actions/setup-go action to v6 by @renovate[bot] in #683
  • chore(deps): update module github.com/testcontainers/testcontainers-go to v0.39.0 by @renovate[bot] in #654
  • chore(deps): update module golang.org/x/text to v0.30.0 by @renovate[bot] in #647
  • chore(deps): update module github.com/go-redsync/redsync/v4 to v4.14.0 by @renovate[bot] in #680
  • chore(deps): update module github.com/rhymond/go-money to v1.0.15 by @renovate[bot] in #657
  • chore(deps): update dependency go to v1.25.3 by @renovate[bot] in #644
  • chore(deps): update module github.com/go-playground/form/v4 to v4.3.0 by @renovate[bot] in #679
  • chore(deps): update module github.com/vektra/mockery/v2 to v2.53.5 by @renovate[bot] in #640
  • chore(deps): update module github.com/vektah/gqlparser/v2 to v2.5.31 by @renovate[bot] in #684
  • chore(deps): update module golang.org/x/text to v0.31.0 by @renovate[bot] in #691
  • chore(deps): update module golang.org/x/mod to v0.30.0 by @renovate[bot] in #690
  • chore(deps): bump golang.org/x/crypto from 0.43.0 to 0.45.0 by @dependabot[bot] in #692
  • feat(product): expose product specifications in GraphQL by @lifedraft in #698
  • chore(deps): update dependency go to v1.25.7 by @renovate[bot] in #686
  • feat(cart): expose personal data form mutation in GraphQL by @dylanprovost in #699
  • chore(deps): update golangci/golangci-lint-action action to v9 by @renovate[bot] in #689
  • chore(deps): update dependency go to v1.26.0 by @renovate[bot] in #702
  • chore(deps): update actions/checkout action to v6 by @renovate[bot] in #693
  • feat(sourcing): add SuppliedBy field to identify supply location by @kgrigorev in #704
  • feat(search): add FacetMapper extension point for custom facet types by @lifedraft in #710
  • chore(config): migrate Renovate config by @renovate[bot] in #703
  • chore(deps): update module flamingo.me/pugtemplate to v1.3.2 by @renovate[bot] in #701
  • chore(deps): update dependency golangci/golangci-lint to v2.11.4 by @renovate[bot] in #711
  • chore(deps): update module flamingo.me/flamingo/v3 to v3.17.3 by @renovate[bot] in #700
  • chore(deps): update module golang.org/x/text to v0.36.0 by @renovate[bot] in #697
  • chore(deps): update module golang.org/x/mod to v0.35.0 by @renovate[bot] in #696
  • chore: fix add to cart by @KarolNowakk in #722
  • docs(sourcing): fix grammar and spelling across sourcing module by @kgrigorev in #716
  • feat(prices): add to and from times to the price context by @IvanMaidurov in #723
  • fix(graphql): fix non nullable times by @IvanMaidurov in #725
  • Add cancellation reason support for checkout and payment workflows by @kgrigorev in #724
  • chore(deps): update actions/checkout action to v7 by @renovate[bot] in #726
  • chore(deps): update module golang.org/x/mod to v0.37.0 by @renovate[bot] in #720
  • chore(deps): update module golang.org/x/text to v0.38.0 by @renovate[bot] in #721
  • chore(deps): update dependency golangci/golangci-lint to v2.12.2 by @renovate[bot] in #719
  • chore(deps): update module github.com/testcontainers/testcontainers-go to v0.43.0 by @renovate[bot] in #713
  • chore(deps): update module github.com/vektah/gqlparser/v2 to v2.5.35 by @renovate[bot] in #705
  • chore(deps): bump go.opentelemetry.io/otel/sdk from 1.21.0 to 1.43.0 by @dependabot[bot] in #715
  • chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 by @dependabot[bot] in #714
  • chore(deps): bump go.opentelemetry.io/otel from 1.39.0 to 1.41.0 by @dependabot[bot] in #718
  • feat(product): saleability check against given time range by @IvanMaidurov in #727
  • fix(checkout): wrap payment validation error in custom error by @dylanprovost in #729
  • feat(cart): expose all prices on the line item level by @dylanprovost in #736
  • chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 by @dependabot[bot] in #734
  • chore: sanitize graphql error responses by @KarolNowakk in #740
  • chore(deps): update module github.com/testcontainers/testcontainers-go to v0.44.0 by @renovate[bot] in #744
  • chore(deps): update actions/setup-go action to v7 by @renovate[bot] in #737
  • chore(deps): update dependency golangci/golangci-lint to v2.13.2 by @renovate[bot] in #742
  • chore(deps): bump golang.org/x/net from 0.54.0 to 0.55.0 by @dependabot[bot] in #731
  • chore(deps): update module github.com/stretchr/testify to v1.12.1 by @renovate[bot] in #749
  • chore(deps): update module golang.org/x/mod to v0.41.0 by @renovate[bot] in #750
  • chore(deps): bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 by @dependabot[bot] in #739
  • chore(deps): migrate mockery from v2 to v3 by @renovate[bot] in #662
  • chore(deps): update module golang.org/x/text to v0.42.0 by @renovate[bot] in #752
  • chore(deps): update dependency golangci/golangci-lint to v2.14.0 by @renovate[bot] in #753
  • chore(deps): update module github.com/go-redsync/redsync/v4 to v4.18.0 by @renovate[bot] in #748
  • chore(deps): update module flamingo.me/flamingo/v3 to v3.17.4 by @renovate[bot] in #735
  • chore(deps): update module flamingo.me/dingo to v0.4.1 by @renovate[bot] in #728
  • ci: scan dependencies with govulncheck by @kgrigorev in #755
  • chore: update gqlparser and test on go.mod and latest Go by @renovate[bot] in #730
  • chore: update form and align CI job names by @renovate[bot] in #747
  • chore: update go-archive and run integration tests on go.mod and 1.* by @dependabot[bot] in #738
  • chore(deps): update module github.com/99designs/gqlgen to v0.17.95 by @renovate[bot] in #741
  • chore(deps): update module github.com/vektah/gqlparser/v2 to v2.5.59 by @renovate[bot] in #757
  • chore(deps): update module flamingo.me/graphql to v1.13.0 by @renovate[bot] in #758
  • chore(deps): update module flamingo.me/form to v1.1.4 by @renovate[bot] in #760
  • chore(deps): update module flamingo.me/pugtemplate to v1.3.3 by @renovate[bot] in #761
  • fix(cart): preserve cart errors after sanitizing by @KarolNowakk in #751
  • fix(product): map built-in facets in WrapSearchResult by @kgrigorev in #764
  • doc(changelog): prepare release v3.13.0 by @kgrigorev in #759

New Contributors

Full Changelog: v3.12.0...v3.13.0

Don't miss a new flamingo-commerce release

NewReleases is sending notifications on new releases.