From 7920cd9d3d40c055acad18ea0f18c4360b319161 Mon Sep 17 00:00:00 2001
From: Kristina <7614497+khjrtbrg@users.noreply.github.com>
Date: Wed, 9 Apr 2025 12:05:36 +0200
Subject: [PATCH] Merge pull request #24519 from
overleaf/kh-add-payment-service-low-delta
[web] add `PaymentService` to `buildUsersSubscriptionViewModel`
GitOrigin-RevId: 543531226bad38d34b225dae28cf00a5e02e5558
---
.../Features/Subscription/PaymentService.js | 81 ++++
.../Features/Subscription/RecurlyClient.js | 85 +++-
.../Features/Subscription/RecurlyEntities.js | 46 ++
.../Features/Subscription/RecurlyWrapper.js | 22 -
.../SubscriptionViewModelBuilder.js | 148 +++---
.../components/dashboard/pause-modal.tsx | 4 +-
...rsonal-subscription-recurly-sync-email.tsx | 2 +-
.../dashboard/personal-subscription.tsx | 3 +-
.../dashboard/states/active/active-new.tsx | 13 +-
.../dashboard/states/active/active.tsx | 4 +-
.../dashboard/states/active/add-ons.tsx | 2 +-
.../cancel-plan/cancel-subscription.tsx | 2 +-
.../active/cancel-subscription-button.tsx | 4 +-
.../change-plan/change-to-group-plan.tsx | 4 +-
.../states/active/pending-plan-change.tsx | 2 +-
.../states/active/subscription-remainder.tsx | 4 +-
.../components/shared/price-exceptions.tsx | 2 +-
.../successful-subscription.tsx | 2 +-
.../dashboard/personal-subscription.test.tsx | 2 +-
.../dashboard/states/active/active.test.tsx | 4 +-
.../subscription/fixtures/subscriptions.ts | 140 ++----
.../src/Subscription/PaymentServiceTests.js | 117 +++++
.../src/Subscription/RecurlyClientTests.js | 81 +++-
.../SubscriptionViewModelBuilderTests.js | 442 ++++++++++++------
.../subscription/dashboard/subscription.ts | 33 +-
services/web/types/subscription/plan.ts | 8 +-
26 files changed, 840 insertions(+), 417 deletions(-)
create mode 100644 services/web/app/src/Features/Subscription/PaymentService.js
create mode 100644 services/web/test/unit/src/Subscription/PaymentServiceTests.js
diff --git a/services/web/app/src/Features/Subscription/PaymentService.js b/services/web/app/src/Features/Subscription/PaymentService.js
new file mode 100644
index 0000000000..6f8a12e0a0
--- /dev/null
+++ b/services/web/app/src/Features/Subscription/PaymentService.js
@@ -0,0 +1,81 @@
+// @ts-check
+
+const RecurlyClient = require('./RecurlyClient.js')
+const logger = require('@overleaf/logger')
+const { callbackify } = require('util')
+
+/**
+ * @import { RecurlySubscription, RecurlyAccount, RecurlyCoupon } from "./RecurlyEntities"
+ * @import { ObjectId } from 'mongodb'
+ */
+
+/**
+ * this represents a subset of the Mongo Subscription record
+ *
+ * @typedef {object} MongoSubscription
+ * @property {ObjectId} admin_id
+ * @property {string} [recurlySubscription_id]
+ */
+
+/**
+ * @typedef {object} PaymentRecord
+ * @property {RecurlySubscription} subscription
+ * @property {RecurlyAccount | null} account
+ * @property {RecurlyCoupon[]} coupons
+ */
+
+/**
+ * Get payment information from our Mongo record
+ *
+ * @param {MongoSubscription} subscription
+ * @return {Promise
{t('reduce_costs_group_licenses')}