Ghost/ghost
Chris Raible bf895e6e99
🐛 Fixed offer redemptions for free members redeeming an offer (#20571)
ref
https://linear.app/tryghost/issue/ENG-1251/support-escalation-re-offers-not-tracking

- Offer Redemptions were not being persisted in the database for
existing free members who upgrade to a paid plan with an offer, which
resulted in inaccurate offer redemption counts. This made it difficult
to assess the performance of an offer.
- Previously, Ghost recorded an offer redemption in the DB in response
to the `SubscriptionCreatedEvent`, under the assumption that the offer
details would be included in this event. This assumption was valid for
brand new members starting a subscription with an offer, but not for
existing free members upgrading to a paid plan with an offer.
- For existing free members, the subscription is first stored in Ghost
in response to the `customer.subscription.created` Stripe webhook. At
this point, the offer/discount is not attached to the subscription, so
the `SubscriptionCreatedEvent` triggers without the offer information,
and the offer redemption is not recorded. After the
`checkout.session.completed` webhook is received (which _does_ include
the offer details), the subscription is updated in Ghost, but the Offer
Redemption is not stored.
- For brand new members, the `customer.subscription.created` webhook
no-ops, because the member and Stripe Customer don't exist yet.
Therefore, the subscription is first created in Ghost in response to the
`checkout.session.completed` webhook, which _does_ include the offer
information, so the offer information is included in the
`SubscriptionCreatedEvent` and the offer redemption is recorded as
expected.
- This change adds a new `OfferRedemptionEvent`, which triggers
either: (1) when a new subscription is created with an offer (as in the
case of a brand new member), or (2) when an existing subscription is
first updated to include an offer (as in the case of an existing free
member upgrading with an offer). The Offer Redemption is then persisted
in the DB in response to the `OfferRedemptionEvent` rather than the
`SubscriptionCreatedEvent`.
2024-07-09 16:05:26 -07:00
..
adapter-cache-memory-ttl
adapter-cache-redis Added an optional timeout parameter to AdapterCacheRedis (#20131) 2024-05-02 20:39:23 -07:00
adapter-manager Update TryGhost packages 2024-05-01 17:01:41 +02:00
admin Updated timezone dependency (#20570) 2024-07-09 16:31:36 -05:00
announcement-bar-settings
api-framework Fixed handling objects as API input parameters 2024-06-24 10:14:43 +02:00
api-version-compatibility-service Fixed handling requests with mismatching version and missing key 2024-05-02 13:03:26 +02:00
audience-feedback Update TryGhost packages 2024-05-27 16:58:32 +02:00
bookshelf-repository Update TryGhost packages 2024-05-27 16:58:32 +02:00
bootstrap-socket Update TryGhost packages 2024-05-27 16:58:32 +02:00
collections Update TryGhost packages 2024-05-27 16:58:32 +02:00
constants
core Updated timezone dependency (#20570) 2024-07-09 16:31:36 -05:00
custom-theme-settings-service Update TryGhost packages 2024-05-27 16:58:32 +02:00
data-generator Updated data-generator to create lexical rather than mobiledoc posts 2024-06-17 11:53:03 +01:00
domain-events Update TryGhost packages 2024-05-27 16:58:32 +02:00
donations Update dependency typescript to v5.4.5 2024-04-16 09:08:58 +02:00
dynamic-routing-events
email-addresses Update dependency nodemailer to v6.9.14 2024-06-19 16:54:52 +00:00
email-analytics-provider-mailgun
email-analytics-service Update TryGhost packages 2024-05-27 16:58:32 +02:00
email-content-generator
email-events
email-service Updated timezone dependency (#20570) 2024-07-09 16:31:36 -05:00
email-suppression-list
express-dynamic-redirects
external-media-inliner
extract-api-key
ghost Removed unused dependency 2024-07-03 14:35:31 +02:00
html-to-plaintext
i18n Added Greek locale for comments, portal, signup-form, ghost. (#20361) 2024-06-11 16:49:01 -04:00
importer-handler-content-files
importer-revue Update Koenig packages (#20415) 2024-06-19 12:00:21 +00:00
in-memory-repository Improved performance for filter strings with multiple neq statements (#20198) 2024-05-13 10:35:27 -05:00
job-manager Update TryGhost packages 2024-05-27 16:58:32 +02:00
link-redirects Updated documentation for LinkRedirects (#20378) 2024-06-12 23:27:15 +00:00
link-replacer Pinned dependencies (#20257) 2024-05-27 15:29:32 +00:00
link-tracking Added tests for fix - URLs sent in emails containing a % can not be updated (#20569) 2024-07-10 02:04:45 +05:30
magic-link Update TryGhost packages 2024-05-27 16:58:32 +02:00
mail-events Update TryGhost packages 2024-05-27 16:58:32 +02:00
mailgun-client Bumped @tryghost/metrics package 2024-07-04 11:40:56 +02:00
member-attribution Fixed extra arguments being supplied to function calls 2024-05-07 11:44:07 +02:00
member-events 🐛 Fixed offer redemptions for free members redeeming an offer (#20571) 2024-07-09 16:05:26 -07:00
members-api 🐛 Fixed offer redemptions for free members redeeming an offer (#20571) 2024-07-09 16:05:26 -07:00
members-csv 🔒 Added escaping to member export CSV fields 2024-04-03 10:21:02 +02:00
members-events-service Updated timezone dependency (#20570) 2024-07-09 16:31:36 -05:00
members-importer Updated timezone dependency (#20570) 2024-07-09 16:31:36 -05:00
members-ssr Removed members caching cookies when no member is logged in (#20349) 2024-06-06 16:28:36 -07:00
mentions-email-report
milestones Update TryGhost packages 2024-05-01 17:01:41 +02:00
minifier Update dependency terser to v5.31.1 2024-06-06 15:59:09 +00:00
model-to-domain-event-interceptor
mw-api-version-mismatch Fixed extra arguments being supplied to function calls 2024-05-07 11:44:07 +02:00
mw-cache-control
mw-error-handler Update TryGhost packages 2024-05-27 16:58:32 +02:00
mw-session-from-token Added function names to more middleware 2024-05-06 17:51:39 +02:00
mw-update-user-last-seen
mw-version-match Update TryGhost packages 2024-05-27 16:58:32 +02:00
mw-vhost
nql-filter-expansions
oembed-service 🐛 Fixed pasting product URLs into the editor (#20565) 2024-07-09 18:28:56 +02:00
offers Update TryGhost packages 2024-05-27 16:58:32 +02:00
package-json Update TryGhost packages 2024-05-27 16:58:32 +02:00
payments Update TryGhost packages 2024-05-01 17:01:41 +02:00
post-events
post-revisions Added custom excerpt to post revisions (#20323) 2024-06-05 14:47:33 +01:00
posts-service Removed ActivityPub backend from Ghost (#20410) 2024-06-19 15:36:36 +07:00
recommendations Update dependency @types/node to v20.14.8 2024-06-24 10:07:19 +02:00
referrers
security Update TryGhost packages 2024-05-01 08:49:04 +02:00
session-service Added function names to more middleware 2024-05-06 17:51:39 +02:00
settings-path-manager Update TryGhost packages 2024-05-27 16:58:32 +02:00
slack-notifications Update TryGhost packages 2024-05-27 16:58:32 +02:00
staff-service
stats-service Update Types packages 2024-04-30 22:00:55 +02:00
stripe Update TryGhost packages 2024-05-27 16:58:32 +02:00
tiers Update TryGhost packages 2024-05-27 16:58:32 +02:00
update-check-service Update TryGhost packages 2024-05-27 16:58:32 +02:00
verification-trigger Update TryGhost packages 2024-05-01 17:01:41 +02:00
version-notifications-data-service Fixed handling requests with mismatching version and missing key 2024-05-02 13:03:26 +02:00
webmentions Update TryGhost packages 2024-05-27 16:58:32 +02:00
tsconfig.json