AccountMappingHelper.mjs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. const mappings = new Map([
  2. ['salesforce_id', generateSubscriptionToSalesforceMapping],
  3. ['v1_id', generateSubscriptionToV1Mapping],
  4. ['recurlySubscription_id', generateSubscriptionToRecurlyMapping],
  5. ])
  6. /**
  7. * @typedef {(import('./types.d.ts').AccountMapping)} AccountMapping
  8. * @import { StripePaymentProviderService } from '../../../../types/subscription/dashboard/subscription'
  9. */
  10. /**
  11. *
  12. * @param {Object} subscription
  13. * @param {Object} updatedSubscription
  14. * @return {Array<AccountMapping>}
  15. */
  16. function extractAccountMappingsFromSubscription(
  17. subscription,
  18. updatedSubscription
  19. ) {
  20. const accountMappings = []
  21. mappings.forEach((generateMapping, param) => {
  22. if (updatedSubscription[param] || updatedSubscription[param] === '') {
  23. if (subscription[param] !== updatedSubscription[param]) {
  24. accountMappings.push(
  25. generateMapping(subscription.id, updatedSubscription[param])
  26. )
  27. }
  28. }
  29. })
  30. return accountMappings
  31. }
  32. function generateV1Mapping(v1Id, salesforceId, createdAt) {
  33. return {
  34. source: 'salesforce',
  35. sourceEntity: 'account',
  36. sourceEntityId: salesforceId,
  37. target: 'v1',
  38. targetEntity: 'university',
  39. targetEntityId: v1Id,
  40. createdAt,
  41. }
  42. }
  43. function generateSubscriptionToV1Mapping(subscriptionId, v1Id) {
  44. return {
  45. source: 'v1',
  46. sourceEntity: 'university',
  47. sourceEntityId: v1Id,
  48. target: 'v2',
  49. targetEntity: 'subscription',
  50. targetEntityId: subscriptionId,
  51. createdAt: new Date().toISOString(),
  52. }
  53. }
  54. function generateSubscriptionToSalesforceMapping(subscriptionId, salesforceId) {
  55. return {
  56. source: 'salesforce',
  57. sourceEntity: 'account',
  58. sourceEntityId: salesforceId,
  59. target: 'v2',
  60. targetEntity: 'subscription',
  61. targetEntityId: subscriptionId,
  62. createdAt: new Date().toISOString(),
  63. }
  64. }
  65. /**
  66. *
  67. * @param {string} subscriptionId
  68. * @param {string} recurlyId
  69. * @param {string} [createdAt] - Should be an ISO date
  70. * @return {AccountMapping}
  71. */
  72. function generateSubscriptionToRecurlyMapping(
  73. subscriptionId,
  74. recurlyId,
  75. createdAt = new Date().toISOString()
  76. ) {
  77. return {
  78. source: 'recurly',
  79. sourceEntity: 'subscription',
  80. sourceEntityId: recurlyId,
  81. target: 'v2',
  82. targetEntity: 'subscription',
  83. targetEntityId: subscriptionId,
  84. createdAt,
  85. }
  86. }
  87. /**
  88. *
  89. * @param {string} subscriptionId
  90. * @param {string} stripeId
  91. * @param {StripePaymentProviderService} stripePaymentProviderService
  92. * @param {string} [createdAt] - Should be an ISO date
  93. * @return {AccountMapping}
  94. */
  95. function generateSubscriptionToStripeMapping(
  96. subscriptionId,
  97. stripeId,
  98. stripePaymentProviderService,
  99. createdAt = new Date().toISOString()
  100. ) {
  101. return {
  102. source: stripePaymentProviderService,
  103. sourceEntity: 'subscription',
  104. sourceEntityId: stripeId,
  105. target: 'v2',
  106. targetEntity: 'subscription',
  107. targetEntityId: subscriptionId,
  108. createdAt,
  109. }
  110. }
  111. export default {
  112. extractAccountMappingsFromSubscription,
  113. generateV1Mapping,
  114. generateSubscriptionToRecurlyMapping,
  115. generateSubscriptionToStripeMapping,
  116. }