Ghost/ghost/offers
Simon Backx 6ab29c14e4 Fixed OfferCreatedEvent being dispatched before the transaction has been committed (#391)
refs https://github.com/TryGhost/Ghost/pull/14488

**Bug:**
When creating a new offer, sometimes no discount object is created in Stripe (only in MySQL). This issue causes tests to fail in https://github.com/TryGhost/Ghost/pull/14488

**Cause:**
When creating an offer with the OffersAPI, we create a new transaction to save the offer and check for uniqueness. Inside that transaction, we dispatch an OfferCreatedEvent event before the transaction is committed to the database.

When listening for this event in the `members-payments` package, we create the discount object in Stripe and save the stripe_coupon_id to the newly created offer. But because (in most cases) the offer doesn't yet exist in the database, that listener fails without warning and exits early.

**Solution:**
Creating a discount in Stripe should only happen after we succesfully committed the offer to the database. If we don't wait for the commit, the offer often (by chance) won't exist in the database, so the coupon won't be created inside Stripe. The solution is to wait for the transaction to succeed/be committed before dispatching the event.
2022-04-19 12:47:03 +02:00
..
lib Fixed OfferCreatedEvent being dispatched before the transaction has been committed (#391) 2022-04-19 12:47:03 +02:00
test Required OfferName to be a maximum of 40 characters 2021-11-25 12:34:33 +02:00
.eslintrc.js Removed @babel/eslint-parser, set ecmaVersion instead 2022-02-15 12:30:17 +00:00
index.js Ensured correct usage of @tryghost/errors everywhere 2022-02-15 12:30:36 +00:00
jsconfig.json Added initial Offers module 2021-10-05 11:19:15 +02:00
LICENSE 2022 2022-01-06 10:09:25 +00:00
package.json Published new versions 2022-04-19 11:23:04 +02:00
README.md Added initial Offers module 2021-10-05 11:19:15 +02:00

Offers

Install

npm install @tryghost/offers --save

or

yarn add @tryghost/offers

Usage

Develop

This is a mono repository, managed with lerna.

Follow the instructions for the top-level repo.

  1. git clone this repo & cd into it as usual
  2. Run yarn to install top-level dependencies.

Run

  • yarn dev

Test

  • yarn lint run just eslint
  • yarn test run lint and tests