@carlonicora/nestjs-neo4jsonapi 6.8.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/common/decorators/cache-invalidate.decorator.d.ts +2 -1
  2. package/dist/common/decorators/cache-invalidate.decorator.d.ts.map +1 -1
  3. package/dist/common/decorators/cache-invalidate.decorator.js +23 -3
  4. package/dist/common/decorators/cache-invalidate.decorator.js.map +1 -1
  5. package/dist/common/decorators/validate-id.decorator.d.ts +4 -1
  6. package/dist/common/decorators/validate-id.decorator.d.ts.map +1 -1
  7. package/dist/common/decorators/validate-id.decorator.js +22 -2
  8. package/dist/common/decorators/validate-id.decorator.js.map +1 -1
  9. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  10. package/dist/foundations/foundations.modules.js +2 -0
  11. package/dist/foundations/foundations.modules.js.map +1 -1
  12. package/dist/foundations/handbook/controllers/handbook.controller.d.ts +2 -1
  13. package/dist/foundations/handbook/controllers/handbook.controller.d.ts.map +1 -1
  14. package/dist/foundations/handbook/controllers/handbook.controller.js +5 -4
  15. package/dist/foundations/handbook/controllers/handbook.controller.js.map +1 -1
  16. package/dist/foundations/role/controllers/role.controller.d.ts +3 -2
  17. package/dist/foundations/role/controllers/role.controller.d.ts.map +1 -1
  18. package/dist/foundations/role/controllers/role.controller.js +9 -7
  19. package/dist/foundations/role/controllers/role.controller.js.map +1 -1
  20. package/dist/foundations/stripe/index.d.ts +1 -0
  21. package/dist/foundations/stripe/index.d.ts.map +1 -1
  22. package/dist/foundations/stripe/index.js +2 -0
  23. package/dist/foundations/stripe/index.js.map +1 -1
  24. package/dist/foundations/stripe/services/stripe.payment.service.d.ts +33 -0
  25. package/dist/foundations/stripe/services/stripe.payment.service.d.ts.map +1 -1
  26. package/dist/foundations/stripe/services/stripe.payment.service.js +68 -0
  27. package/dist/foundations/stripe/services/stripe.payment.service.js.map +1 -1
  28. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.d.ts +14 -0
  29. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.d.ts.map +1 -0
  30. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.js +62 -0
  31. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.js.map +1 -0
  32. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.d.ts +28 -0
  33. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.d.ts.map +1 -0
  34. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.js +136 -0
  35. package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.js.map +1 -0
  36. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.d.ts +26 -0
  37. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.d.ts.map +1 -0
  38. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.js +131 -0
  39. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.js.map +1 -0
  40. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.d.ts +11 -0
  41. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.d.ts.map +1 -0
  42. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.js +45 -0
  43. package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.js.map +1 -0
  44. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.d.ts +13 -0
  45. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.d.ts.map +1 -0
  46. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.js +55 -0
  47. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.js.map +1 -0
  48. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.d.ts +24 -0
  49. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.d.ts.map +1 -0
  50. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.js +105 -0
  51. package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.js.map +1 -0
  52. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.d.ts +8 -0
  53. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.d.ts.map +1 -0
  54. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.js +36 -0
  55. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.js.map +1 -0
  56. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.d.ts +12 -0
  57. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.d.ts.map +1 -0
  58. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.js +51 -0
  59. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.js.map +1 -0
  60. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.d.ts +31 -0
  61. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.d.ts.map +1 -0
  62. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.js +120 -0
  63. package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.js.map +1 -0
  64. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.d.ts +28 -0
  65. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.d.ts.map +1 -0
  66. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.js +35 -0
  67. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.js.map +1 -0
  68. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.d.ts +5 -0
  69. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.d.ts.map +1 -0
  70. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.js +12 -0
  71. package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.js.map +1 -0
  72. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.d.ts +18 -0
  73. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.d.ts.map +1 -0
  74. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.js +21 -0
  75. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.js.map +1 -0
  76. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.d.ts +6 -0
  77. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.d.ts.map +1 -0
  78. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.js +13 -0
  79. package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.js.map +1 -0
  80. package/dist/foundations/stripe-coupon/entities/stripe-coupon.d.ts +32 -0
  81. package/dist/foundations/stripe-coupon/entities/stripe-coupon.d.ts.map +1 -0
  82. package/dist/foundations/stripe-coupon/entities/stripe-coupon.js +37 -0
  83. package/dist/foundations/stripe-coupon/entities/stripe-coupon.js.map +1 -0
  84. package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.d.ts +5 -0
  85. package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.d.ts.map +1 -0
  86. package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.js +12 -0
  87. package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.js.map +1 -0
  88. package/dist/foundations/stripe-coupon/index.d.ts +21 -0
  89. package/dist/foundations/stripe-coupon/index.d.ts.map +1 -0
  90. package/dist/foundations/stripe-coupon/index.js +43 -0
  91. package/dist/foundations/stripe-coupon/index.js.map +1 -0
  92. package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.d.ts +41 -0
  93. package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.d.ts.map +1 -0
  94. package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.js +97 -0
  95. package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.js.map +1 -0
  96. package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.d.ts +29 -0
  97. package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.d.ts.map +1 -0
  98. package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.js +55 -0
  99. package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.js.map +1 -0
  100. package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.d.ts +70 -0
  101. package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.d.ts.map +1 -0
  102. package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.js +172 -0
  103. package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.js.map +1 -0
  104. package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.d.ts +81 -0
  105. package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.d.ts.map +1 -0
  106. package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.js +206 -0
  107. package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.js.map +1 -0
  108. package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.d.ts +92 -0
  109. package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.d.ts.map +1 -0
  110. package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.js +134 -0
  111. package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.js.map +1 -0
  112. package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.d.ts +29 -0
  113. package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.d.ts.map +1 -0
  114. package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.js +73 -0
  115. package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.js.map +1 -0
  116. package/dist/foundations/stripe-coupon/services/stripe-coupon.service.d.ts +65 -0
  117. package/dist/foundations/stripe-coupon/services/stripe-coupon.service.d.ts.map +1 -0
  118. package/dist/foundations/stripe-coupon/services/stripe-coupon.service.js +200 -0
  119. package/dist/foundations/stripe-coupon/services/stripe-coupon.service.js.map +1 -0
  120. package/dist/foundations/stripe-coupon/stripe-coupon.module.d.ts +14 -0
  121. package/dist/foundations/stripe-coupon/stripe-coupon.module.d.ts.map +1 -0
  122. package/dist/foundations/stripe-coupon/stripe-coupon.module.js +91 -0
  123. package/dist/foundations/stripe-coupon/stripe-coupon.module.js.map +1 -0
  124. package/dist/foundations/stripe-coupon/utils/places-left.d.ts +19 -0
  125. package/dist/foundations/stripe-coupon/utils/places-left.d.ts.map +1 -0
  126. package/dist/foundations/stripe-coupon/utils/places-left.js +33 -0
  127. package/dist/foundations/stripe-coupon/utils/places-left.js.map +1 -0
  128. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.d.ts +22 -0
  129. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.d.ts.map +1 -0
  130. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.js +48 -0
  131. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.js.map +1 -0
  132. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.d.ts +51 -0
  133. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.d.ts.map +1 -0
  134. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.js +129 -0
  135. package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.js.map +1 -0
  136. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts +7 -1
  137. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts.map +1 -1
  138. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js +18 -5
  139. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js.map +1 -1
  140. package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.d.ts +30 -0
  141. package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.d.ts.map +1 -0
  142. package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.js +57 -0
  143. package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.js.map +1 -0
  144. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts +7 -0
  145. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts.map +1 -1
  146. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.d.ts.map +1 -1
  147. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.js +6 -0
  148. package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.js.map +1 -1
  149. package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.d.ts +8 -0
  150. package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.d.ts.map +1 -1
  151. package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.js +9 -1
  152. package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.js.map +1 -1
  153. package/dist/foundations/stripe-subscription/index.d.ts +3 -2
  154. package/dist/foundations/stripe-subscription/index.d.ts.map +1 -1
  155. package/dist/foundations/stripe-subscription/index.js +5 -1
  156. package/dist/foundations/stripe-subscription/index.js.map +1 -1
  157. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts +14 -0
  158. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
  159. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +32 -0
  160. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
  161. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.d.ts.map +1 -1
  162. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.js +6 -0
  163. package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.js.map +1 -1
  164. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts +36 -3
  165. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map +1 -1
  166. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js +174 -38
  167. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js.map +1 -1
  168. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts +7 -0
  169. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts.map +1 -1
  170. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js +29 -2
  171. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js.map +1 -1
  172. package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.d.ts +27 -0
  173. package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.d.ts.map +1 -0
  174. package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.js +62 -0
  175. package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.js.map +1 -0
  176. package/dist/foundations/stripe-subscription/stripe-subscription.module.d.ts.map +1 -1
  177. package/dist/foundations/stripe-subscription/stripe-subscription.module.js +10 -0
  178. package/dist/foundations/stripe-subscription/stripe-subscription.module.js.map +1 -1
  179. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts.map +1 -1
  180. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +16 -1
  181. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
  182. package/dist/foundations/two-factor/controllers/passkey.controller.d.ts +1 -1
  183. package/dist/foundations/two-factor/controllers/passkey.controller.d.ts.map +1 -1
  184. package/dist/foundations/two-factor/controllers/passkey.controller.js +6 -5
  185. package/dist/foundations/two-factor/controllers/passkey.controller.js.map +1 -1
  186. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-coupon-api.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/services/stripe-coupon-api.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import { JsonApiListDocument } from "../../../core/jsonapi/interfaces/jsonapi.document.interface";
3
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
4
+ import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
5
+ import { StripeCustomerRepository } from "../../stripe-customer/repositories/stripe-customer.repository";
6
+ import { StripePriceRepository } from "../../stripe-price/repositories/stripe-price.repository";
7
+ import { StripeSubscriptionRepository } from "../../stripe-subscription/repositories/stripe-subscription.repository";
8
+ import { StripeCouponCode, StripeCouponCodeDescriptor } from "../entities/stripe-coupon-code";
9
+ import { StripeCouponCodeRepository } from "../repositories/stripe-coupon-code.repository";
10
+ import { StripeCouponRepository } from "../repositories/stripe-coupon.repository";
11
+ import { StripeCouponApiService } from "./stripe-coupon-api.service";
12
+ /**
13
+ * Checkout-side reads and writes on stored coupon codes: which code applies itself at a
14
+ * GM's first payment, whether Stripe has run out of places, and keeping our counts current.
15
+ */
16
+ export declare class StripeCouponCodeCheckoutService extends AbstractService<StripeCouponCode, typeof StripeCouponCodeDescriptor.relationships> {
17
+ private readonly stripeCouponCodeRepository;
18
+ private readonly stripeCouponRepository;
19
+ private readonly stripeCouponApiService;
20
+ private readonly stripePriceRepository;
21
+ private readonly stripeCustomerRepository;
22
+ private readonly stripeSubscriptionRepository;
23
+ protected readonly descriptor: import("../../..").EntityDescriptor<StripeCouponCode, {
24
+ coupon: {
25
+ model: import("../../..").DataMeta;
26
+ direction: "in";
27
+ relationship: string;
28
+ cardinality: "one";
29
+ required: true;
30
+ dtoKey: string;
31
+ };
32
+ }>;
33
+ private readonly logger;
34
+ constructor(jsonApiService: JsonApiService, stripeCouponCodeRepository: StripeCouponCodeRepository, clsService: ClsService, stripeCouponRepository: StripeCouponRepository, stripeCouponApiService: StripeCouponApiService, stripePriceRepository: StripePriceRepository, stripeCustomerRepository: StripeCustomerRepository, stripeSubscriptionRepository: StripeSubscriptionRepository);
35
+ /**
36
+ * The automatic code, when it applies to this company paying this price for the first time.
37
+ * Returns null whenever any rule fails: the GM then pays the normal price, with no error.
38
+ */
39
+ findAutomaticForPrice(params: {
40
+ companyId: string;
41
+ priceId: string;
42
+ }): Promise<StripeCouponCode | null>;
43
+ /**
44
+ * Checks a promotion code the browser sent at checkout against our automatic code.
45
+ * - "not_automatic": not one of our automatic codes (typed or unknown); pass it to Stripe as is.
46
+ * - "eligible": it is the automatic code and it applies to this first payment right now.
47
+ * - "sold_out": it is the automatic code, it does not apply, and it has no places left.
48
+ * - "unavailable": it is the automatic code and it does not apply for any other reason.
49
+ * Uses the same rules as findAutomaticForPrice, so the review and the payment agree.
50
+ */
51
+ checkAutomaticForPrice(params: {
52
+ companyId: string;
53
+ priceId: string;
54
+ stripePromotionCodeId: string;
55
+ firstPayment: boolean;
56
+ }): Promise<"eligible" | "sold_out" | "unavailable" | "not_automatic">;
57
+ /**
58
+ * The automatic code for a price as a JSON:API list of 0 or 1 code, coupon included.
59
+ */
60
+ findAutomaticForPriceDocument(params: {
61
+ companyId: string;
62
+ priceId: string;
63
+ query: any;
64
+ }): Promise<JsonApiListDocument>;
65
+ /**
66
+ * Reads the promotion code and its coupon live from Stripe and tells whether either has run out.
67
+ */
68
+ isExhausted(stripePromotionCodeId: string): Promise<boolean>;
69
+ /**
70
+ * Re-reads a promotion code and its coupon from Stripe and writes the counts to our nodes.
71
+ * A no-op when the code is not one of ours; logs and never throws.
72
+ */
73
+ refreshCountsByStripePromotionCodeId(stripePromotionCodeId: string): Promise<void>;
74
+ /**
75
+ * No places left: our copy says 0, or Stripe says so live. A failed live read counts as "has places".
76
+ */
77
+ private hasNoPlacesLeft;
78
+ private limitReached;
79
+ private resolveCoupon;
80
+ }
81
+ //# sourceMappingURL=stripe-coupon-code-checkout.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-coupon-code-checkout.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAElG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,uEAAuE,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,qBACa,+BAAgC,SAAQ,eAAe,CAClE,gBAAgB,EAChB,OAAO,0BAA0B,CAAC,aAAa,CAChD;IAMG,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAE3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAX/C,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;OAA8B;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4D;gBAGjF,cAAc,EAAE,cAAc,EACb,0BAA0B,EAAE,0BAA0B,EACvE,UAAU,EAAE,UAAU,EACL,sBAAsB,EAAE,sBAAsB,EAC9C,sBAAsB,EAAE,sBAAsB,EAC9C,qBAAqB,EAAE,qBAAqB,EAC5C,wBAAwB,EAAE,wBAAwB,EAClD,4BAA4B,EAAE,4BAA4B;IAK7E;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAmD7G;;;;;;;OAOG;IACG,sBAAsB,CAAC,MAAM,EAAE;QACnC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,YAAY,EAAE,OAAO,CAAC;KACvB,GAAG,OAAO,CAAC,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;IAetE;;OAEG;IACG,6BAA6B,CAAC,MAAM,EAAE;QAC1C,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,GAAG,CAAC;KACZ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOhC;;OAEG;IACG,WAAW,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAalE;;;OAGG;IACG,oCAAoC,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxF;;OAEG;YACW,eAAe;IAW7B,OAAO,CAAC,YAAY;YAIN,aAAa;CAM5B"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var StripeCouponCodeCheckoutService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.StripeCouponCodeCheckoutService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const nestjs_cls_1 = require("nestjs-cls");
16
+ const jsonapi_paginator_1 = require("../../../core/jsonapi/serialisers/jsonapi.paginator");
17
+ const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
18
+ const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
19
+ const stripe_customer_repository_1 = require("../../stripe-customer/repositories/stripe-customer.repository");
20
+ const stripe_price_repository_1 = require("../../stripe-price/repositories/stripe-price.repository");
21
+ const stripe_subscription_repository_1 = require("../../stripe-subscription/repositories/stripe-subscription.repository");
22
+ const stripe_coupon_code_1 = require("../entities/stripe-coupon-code");
23
+ const stripe_coupon_code_repository_1 = require("../repositories/stripe-coupon-code.repository");
24
+ const stripe_coupon_repository_1 = require("../repositories/stripe-coupon.repository");
25
+ const places_left_1 = require("../utils/places-left");
26
+ const stripe_coupon_api_service_1 = require("./stripe-coupon-api.service");
27
+ /**
28
+ * Checkout-side reads and writes on stored coupon codes: which code applies itself at a
29
+ * GM's first payment, whether Stripe has run out of places, and keeping our counts current.
30
+ */
31
+ let StripeCouponCodeCheckoutService = StripeCouponCodeCheckoutService_1 = class StripeCouponCodeCheckoutService extends abstract_service_1.AbstractService {
32
+ constructor(jsonApiService, stripeCouponCodeRepository, clsService, stripeCouponRepository, stripeCouponApiService, stripePriceRepository, stripeCustomerRepository, stripeSubscriptionRepository) {
33
+ super(jsonApiService, stripeCouponCodeRepository, clsService, stripe_coupon_code_1.StripeCouponCodeDescriptor.model);
34
+ this.stripeCouponCodeRepository = stripeCouponCodeRepository;
35
+ this.stripeCouponRepository = stripeCouponRepository;
36
+ this.stripeCouponApiService = stripeCouponApiService;
37
+ this.stripePriceRepository = stripePriceRepository;
38
+ this.stripeCustomerRepository = stripeCustomerRepository;
39
+ this.stripeSubscriptionRepository = stripeSubscriptionRepository;
40
+ this.descriptor = stripe_coupon_code_1.StripeCouponCodeDescriptor;
41
+ this.logger = new common_1.Logger(StripeCouponCodeCheckoutService_1.name);
42
+ }
43
+ /**
44
+ * The automatic code, when it applies to this company paying this price for the first time.
45
+ * Returns null whenever any rule fails: the GM then pays the normal price, with no error.
46
+ */
47
+ async findAutomaticForPrice(params) {
48
+ const code = await this.stripeCouponCodeRepository.findAutomatic();
49
+ if (!code || !code.active || !code.automatic)
50
+ return null;
51
+ const coupon = code.coupon;
52
+ if (!coupon || !coupon.valid)
53
+ return null;
54
+ const now = new Date();
55
+ if (coupon.redeemBy && new Date(coupon.redeemBy).getTime() <= now.getTime())
56
+ return null;
57
+ if (code.expiresAt && new Date(code.expiresAt).getTime() <= now.getTime())
58
+ return null;
59
+ // Stripe treats a trial's €0 invoice as a past transaction, so a trial GM would be refused.
60
+ if (code.firstTimeTransaction)
61
+ return null;
62
+ const left = (0, places_left_1.placesLeft)(code, coupon);
63
+ if (left !== null && left <= 0)
64
+ return null;
65
+ const price = await this.stripePriceRepository.findById({ id: params.priceId });
66
+ if (!price || price.priceType !== "recurring" || price.isTrial)
67
+ return null;
68
+ if (coupon.stripeProductIds?.length) {
69
+ const stripeProductId = price.stripeProduct?.stripeProductId;
70
+ if (!stripeProductId || !coupon.stripeProductIds.includes(stripeProductId))
71
+ return null;
72
+ }
73
+ if (code.minimumAmount !== undefined && code.minimumAmount !== null) {
74
+ if (code.minimumAmountCurrency &&
75
+ code.minimumAmountCurrency.toLowerCase() !== (price.currency ?? "").toLowerCase())
76
+ return null;
77
+ if ((price.unitAmount ?? 0) < code.minimumAmount)
78
+ return null;
79
+ }
80
+ const customer = await this.stripeCustomerRepository.findByCompanyId({ companyId: params.companyId });
81
+ if (!customer)
82
+ return null;
83
+ if (code.stripeCustomerId && code.stripeCustomerId !== customer.stripeCustomerId)
84
+ return null;
85
+ // A first payment only: any subscription (canceled included) on a paid recurring price rules it out.
86
+ const subscriptions = await this.stripeSubscriptionRepository.findByStripeCustomerId({
87
+ stripeCustomerId: customer.id,
88
+ });
89
+ const hasPaidRecurring = subscriptions.some((subscription) => subscription.stripePrice?.priceType === "recurring" && !subscription.stripePrice?.isTrial);
90
+ if (hasPaidRecurring)
91
+ return null;
92
+ return code;
93
+ }
94
+ /**
95
+ * Checks a promotion code the browser sent at checkout against our automatic code.
96
+ * - "not_automatic": not one of our automatic codes (typed or unknown); pass it to Stripe as is.
97
+ * - "eligible": it is the automatic code and it applies to this first payment right now.
98
+ * - "sold_out": it is the automatic code, it does not apply, and it has no places left.
99
+ * - "unavailable": it is the automatic code and it does not apply for any other reason.
100
+ * Uses the same rules as findAutomaticForPrice, so the review and the payment agree.
101
+ */
102
+ async checkAutomaticForPrice(params) {
103
+ const code = await this.stripeCouponCodeRepository.findByStripePromotionCodeId({
104
+ stripePromotionCodeId: params.stripePromotionCodeId,
105
+ });
106
+ if (!code || !code.automatic)
107
+ return "not_automatic";
108
+ // The automatic code only ever applies to a first payment, whatever its places.
109
+ if (!params.firstPayment)
110
+ return "unavailable";
111
+ const current = await this.findAutomaticForPrice({ companyId: params.companyId, priceId: params.priceId });
112
+ if (current?.stripePromotionCodeId === params.stripePromotionCodeId)
113
+ return "eligible";
114
+ return (await this.hasNoPlacesLeft(code)) ? "sold_out" : "unavailable";
115
+ }
116
+ /**
117
+ * The automatic code for a price as a JSON:API list of 0 or 1 code, coupon included.
118
+ */
119
+ async findAutomaticForPriceDocument(params) {
120
+ const paginator = new jsonapi_paginator_1.JsonApiPaginator(params.query);
121
+ const code = await this.findAutomaticForPrice({ companyId: params.companyId, priceId: params.priceId });
122
+ return this.jsonApiService.buildList(stripe_coupon_code_1.StripeCouponCodeDescriptor.model, code ? [code] : [], paginator);
123
+ }
124
+ /**
125
+ * Reads the promotion code and its coupon live from Stripe and tells whether either has run out.
126
+ */
127
+ async isExhausted(stripePromotionCodeId) {
128
+ const promotionCode = await this.stripeCouponApiService.retrievePromotionCode(stripePromotionCodeId);
129
+ if (!promotionCode.active)
130
+ return true;
131
+ if (this.limitReached(promotionCode.max_redemptions, promotionCode.times_redeemed))
132
+ return true;
133
+ const coupon = await this.resolveCoupon(promotionCode);
134
+ if (!coupon)
135
+ return false;
136
+ if (!coupon.valid)
137
+ return true;
138
+ return this.limitReached(coupon.max_redemptions, coupon.times_redeemed);
139
+ }
140
+ /**
141
+ * Re-reads a promotion code and its coupon from Stripe and writes the counts to our nodes.
142
+ * A no-op when the code is not one of ours; logs and never throws.
143
+ */
144
+ async refreshCountsByStripePromotionCodeId(stripePromotionCodeId) {
145
+ try {
146
+ const code = await this.stripeCouponCodeRepository.findByStripePromotionCodeId({ stripePromotionCodeId });
147
+ if (!code)
148
+ return;
149
+ const promotionCode = await this.stripeCouponApiService.retrievePromotionCode(stripePromotionCodeId);
150
+ await this.stripeCouponCodeRepository.patch({
151
+ id: code.id,
152
+ timesRedeemed: promotionCode.times_redeemed,
153
+ active: promotionCode.active,
154
+ });
155
+ const coupon = await this.resolveCoupon(promotionCode);
156
+ if (coupon && code.coupon?.id) {
157
+ await this.stripeCouponRepository.patch({
158
+ id: code.coupon.id,
159
+ timesRedeemed: coupon.times_redeemed,
160
+ valid: coupon.valid,
161
+ });
162
+ }
163
+ }
164
+ catch (error) {
165
+ this.logger.error(`Failed to refresh coupon counts for promotion code ${stripePromotionCodeId}:`, error);
166
+ }
167
+ }
168
+ /**
169
+ * No places left: our copy says 0, or Stripe says so live. A failed live read counts as "has places".
170
+ */
171
+ async hasNoPlacesLeft(code) {
172
+ if (code.coupon && (0, places_left_1.placesLeft)(code, code.coupon) === 0)
173
+ return true;
174
+ try {
175
+ return await this.isExhausted(code.stripePromotionCodeId);
176
+ }
177
+ catch (error) {
178
+ this.logger.error(`Failed to read live places for promotion code ${code.stripePromotionCodeId}:`, error);
179
+ return false;
180
+ }
181
+ }
182
+ limitReached(maxRedemptions, timesRedeemed) {
183
+ return maxRedemptions !== null && maxRedemptions !== undefined && timesRedeemed >= maxRedemptions;
184
+ }
185
+ async resolveCoupon(promotionCode) {
186
+ const coupon = promotionCode.promotion?.coupon;
187
+ if (!coupon)
188
+ return null;
189
+ if (typeof coupon === "string")
190
+ return this.stripeCouponApiService.retrieveCoupon(coupon);
191
+ return coupon;
192
+ }
193
+ };
194
+ exports.StripeCouponCodeCheckoutService = StripeCouponCodeCheckoutService;
195
+ exports.StripeCouponCodeCheckoutService = StripeCouponCodeCheckoutService = StripeCouponCodeCheckoutService_1 = __decorate([
196
+ (0, common_1.Injectable)(),
197
+ __metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
198
+ stripe_coupon_code_repository_1.StripeCouponCodeRepository,
199
+ nestjs_cls_1.ClsService,
200
+ stripe_coupon_repository_1.StripeCouponRepository,
201
+ stripe_coupon_api_service_1.StripeCouponApiService,
202
+ stripe_price_repository_1.StripePriceRepository,
203
+ stripe_customer_repository_1.StripeCustomerRepository,
204
+ stripe_subscription_repository_1.StripeSubscriptionRepository])
205
+ ], StripeCouponCodeCheckoutService);
206
+ //# sourceMappingURL=stripe-coupon-code-checkout.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-coupon-code-checkout.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import Stripe from "stripe";
3
+ import { JsonApiSingleDocument } from "../../../core/jsonapi/interfaces/jsonapi.document.interface";
4
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
5
+ import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
6
+ import { StripeCouponCodePatchDataDTO } from "../dtos/stripe-coupon-code.patch.dto";
7
+ import { StripeCouponCodePostAttributesDTO, StripeCouponCodePostDataDTO } from "../dtos/stripe-coupon-code.post.dto";
8
+ import { StripeCouponCode, StripeCouponCodeDescriptor } from "../entities/stripe-coupon-code";
9
+ import { StripeCouponCodeRepository } from "../repositories/stripe-coupon-code.repository";
10
+ import { StripeCouponRepository } from "../repositories/stripe-coupon.repository";
11
+ import { StripeCouponApiService } from "./stripe-coupon-api.service";
12
+ /**
13
+ * Cross-field checks on a code's attributes, run before any Stripe call.
14
+ */
15
+ export declare function assertCouponCodeAttributes(attributes: StripeCouponCodePostAttributesDTO): void;
16
+ /**
17
+ * The Stripe promotion code parameters for a code POST's attributes.
18
+ */
19
+ export declare function couponCodeStripeParams(stripeCouponId: string, attributes: StripeCouponCodePostAttributesDTO): {
20
+ stripeCouponId: string;
21
+ code: string;
22
+ firstTimeTransaction: boolean;
23
+ minimumAmount: number;
24
+ minimumAmountCurrency: string;
25
+ stripeCustomerId: string;
26
+ expiresAt: Date;
27
+ maxRedemptions: number;
28
+ };
29
+ /**
30
+ * The StripeCouponCode node parameters for a promotion code Stripe has just created.
31
+ */
32
+ export declare function couponCodeNodeParams(params: {
33
+ id: string;
34
+ couponId: string;
35
+ attributes: StripeCouponCodePostAttributesDTO;
36
+ promotionCode: Stripe.PromotionCode;
37
+ }): {
38
+ id: string;
39
+ stripePromotionCodeId: string;
40
+ code: string;
41
+ active: boolean;
42
+ automatic: boolean;
43
+ firstTimeTransaction: boolean;
44
+ minimumAmount: number;
45
+ minimumAmountCurrency: string;
46
+ stripeCustomerId: string;
47
+ expiresAt: string;
48
+ maxRedemptions: number;
49
+ timesRedeemed: number;
50
+ coupon: string;
51
+ };
52
+ /**
53
+ * StripeCouponCodeService
54
+ *
55
+ * Admin operations on the customer-facing codes of a coupon: add a code to an
56
+ * existing coupon, switch "Apply automatically", deactivate / reactivate.
57
+ * Every code is created in Stripe first, then mirrored as a node.
58
+ */
59
+ export declare class StripeCouponCodeService extends AbstractService<StripeCouponCode, typeof StripeCouponCodeDescriptor.relationships> {
60
+ private readonly stripeCouponCodeRepository;
61
+ private readonly stripeCouponRepository;
62
+ private readonly stripeCouponApiService;
63
+ protected readonly descriptor: import("../../..").EntityDescriptor<StripeCouponCode, {
64
+ coupon: {
65
+ model: import("../../..").DataMeta;
66
+ direction: "in";
67
+ relationship: string;
68
+ cardinality: "one";
69
+ required: true;
70
+ dtoKey: string;
71
+ };
72
+ }>;
73
+ constructor(jsonApiService: JsonApiService, stripeCouponCodeRepository: StripeCouponCodeRepository, clsService: ClsService, stripeCouponRepository: StripeCouponRepository, stripeCouponApiService: StripeCouponApiService);
74
+ createForCoupon(params: {
75
+ data: StripeCouponCodePostDataDTO;
76
+ }): Promise<JsonApiSingleDocument>;
77
+ /**
78
+ * Switches "active" (in Stripe, then on the node) and / or "Apply
79
+ * automatically" (ours only: turning it on clears every other code).
80
+ */
81
+ updateFlags(params: {
82
+ data: StripeCouponCodePatchDataDTO;
83
+ }): Promise<JsonApiSingleDocument>;
84
+ /**
85
+ * The id of the coupon a code belongs to, so callers can refresh the
86
+ * coupon's cached entry after a change to one of its codes.
87
+ */
88
+ findCouponId(params: {
89
+ codeId: string;
90
+ }): Promise<string | undefined>;
91
+ }
92
+ //# sourceMappingURL=stripe-coupon-code.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-coupon-code.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/services/stripe-coupon-code.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,iCAAiC,GAAG,IAAI,CAK9F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,iCAAiC;;;;;;;;;EAW3G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,iCAAiC,CAAC;IAC9C,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;CACrC;;;;;;;;;;;;;;EAgBA;AAED;;;;;;GAMG;AACH,qBACa,uBAAwB,SAAQ,eAAe,CAC1D,gBAAgB,EAChB,OAAO,0BAA0B,CAAC,aAAa,CAChD;IAKG,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAE3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAPzC,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;OAA8B;gBAGzD,cAAc,EAAE,cAAc,EACb,0BAA0B,EAAE,0BAA0B,EACvE,UAAU,EAAE,UAAU,EACL,sBAAsB,EAAE,sBAAsB,EAC9C,sBAAsB,EAAE,sBAAsB;IAK3D,eAAe,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,2BAA2B,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuBpG;;;OAGG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,4BAA4B,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoBjG;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAI5E"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.StripeCouponCodeService = void 0;
13
+ exports.assertCouponCodeAttributes = assertCouponCodeAttributes;
14
+ exports.couponCodeStripeParams = couponCodeStripeParams;
15
+ exports.couponCodeNodeParams = couponCodeNodeParams;
16
+ const common_1 = require("@nestjs/common");
17
+ const nestjs_cls_1 = require("nestjs-cls");
18
+ const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
19
+ const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
20
+ const stripe_coupon_code_1 = require("../entities/stripe-coupon-code");
21
+ const stripe_coupon_code_repository_1 = require("../repositories/stripe-coupon-code.repository");
22
+ const stripe_coupon_repository_1 = require("../repositories/stripe-coupon.repository");
23
+ const stripe_coupon_api_service_1 = require("./stripe-coupon-api.service");
24
+ /**
25
+ * Cross-field checks on a code's attributes, run before any Stripe call.
26
+ */
27
+ function assertCouponCodeAttributes(attributes) {
28
+ if (attributes.minimumAmount !== undefined && !attributes.minimumAmountCurrency)
29
+ throw new common_1.BadRequestException("A minimum amount needs a currency");
30
+ if (attributes.minimumAmount === undefined && attributes.minimumAmountCurrency)
31
+ throw new common_1.BadRequestException("A minimum amount currency needs a minimum amount");
32
+ }
33
+ /**
34
+ * The Stripe promotion code parameters for a code POST's attributes.
35
+ */
36
+ function couponCodeStripeParams(stripeCouponId, attributes) {
37
+ return {
38
+ stripeCouponId,
39
+ code: attributes.code,
40
+ firstTimeTransaction: attributes.firstTimeTransaction,
41
+ minimumAmount: attributes.minimumAmount,
42
+ minimumAmountCurrency: attributes.minimumAmountCurrency?.toLowerCase(),
43
+ stripeCustomerId: attributes.stripeCustomerId,
44
+ expiresAt: attributes.expiresAt ? new Date(attributes.expiresAt) : undefined,
45
+ maxRedemptions: attributes.maxRedemptions,
46
+ };
47
+ }
48
+ /**
49
+ * The StripeCouponCode node parameters for a promotion code Stripe has just created.
50
+ */
51
+ function couponCodeNodeParams(params) {
52
+ return {
53
+ id: params.id,
54
+ stripePromotionCodeId: params.promotionCode.id,
55
+ code: params.promotionCode.code,
56
+ active: params.promotionCode.active,
57
+ automatic: params.attributes.automatic ?? false,
58
+ firstTimeTransaction: params.attributes.firstTimeTransaction ?? false,
59
+ minimumAmount: params.attributes.minimumAmount,
60
+ minimumAmountCurrency: params.attributes.minimumAmountCurrency?.toLowerCase(),
61
+ stripeCustomerId: params.attributes.stripeCustomerId,
62
+ expiresAt: params.attributes.expiresAt,
63
+ maxRedemptions: params.attributes.maxRedemptions,
64
+ timesRedeemed: params.promotionCode.times_redeemed ?? 0,
65
+ coupon: params.couponId,
66
+ };
67
+ }
68
+ /**
69
+ * StripeCouponCodeService
70
+ *
71
+ * Admin operations on the customer-facing codes of a coupon: add a code to an
72
+ * existing coupon, switch "Apply automatically", deactivate / reactivate.
73
+ * Every code is created in Stripe first, then mirrored as a node.
74
+ */
75
+ let StripeCouponCodeService = class StripeCouponCodeService extends abstract_service_1.AbstractService {
76
+ constructor(jsonApiService, stripeCouponCodeRepository, clsService, stripeCouponRepository, stripeCouponApiService) {
77
+ super(jsonApiService, stripeCouponCodeRepository, clsService, stripe_coupon_code_1.StripeCouponCodeDescriptor.model);
78
+ this.stripeCouponCodeRepository = stripeCouponCodeRepository;
79
+ this.stripeCouponRepository = stripeCouponRepository;
80
+ this.stripeCouponApiService = stripeCouponApiService;
81
+ this.descriptor = stripe_coupon_code_1.StripeCouponCodeDescriptor;
82
+ }
83
+ async createForCoupon(params) {
84
+ const attributes = params.data.attributes;
85
+ const couponId = params.data.relationships.coupon.data.id;
86
+ assertCouponCodeAttributes(attributes);
87
+ const coupon = await this.stripeCouponRepository.findById({ id: couponId });
88
+ if (!coupon)
89
+ throw new common_1.NotFoundException("Coupon not found");
90
+ const promotionCode = await this.stripeCouponApiService.createPromotionCode(couponCodeStripeParams(coupon.stripeCouponId, attributes));
91
+ await this.stripeCouponCodeRepository.create(couponCodeNodeParams({ id: params.data.id, couponId, attributes, promotionCode }));
92
+ if (attributes.automatic)
93
+ await this.stripeCouponCodeRepository.setAutomatic({ id: params.data.id, automatic: true });
94
+ return this.findById({ id: params.data.id });
95
+ }
96
+ /**
97
+ * Switches "active" (in Stripe, then on the node) and / or "Apply
98
+ * automatically" (ours only: turning it on clears every other code).
99
+ */
100
+ async updateFlags(params) {
101
+ const attributes = params.data.attributes;
102
+ const code = await this.stripeCouponCodeRepository.findById({ id: params.data.id });
103
+ if (!code)
104
+ throw new common_1.NotFoundException("Code not found");
105
+ if (attributes.active !== undefined) {
106
+ await this.stripeCouponApiService.setPromotionCodeActive({
107
+ stripePromotionCodeId: code.stripePromotionCodeId,
108
+ active: attributes.active,
109
+ });
110
+ await this.stripeCouponCodeRepository.patch({ id: code.id, active: attributes.active });
111
+ }
112
+ if (attributes.automatic !== undefined)
113
+ await this.stripeCouponCodeRepository.setAutomatic({ id: code.id, automatic: attributes.automatic });
114
+ return this.findById({ id: code.id });
115
+ }
116
+ /**
117
+ * The id of the coupon a code belongs to, so callers can refresh the
118
+ * coupon's cached entry after a change to one of its codes.
119
+ */
120
+ async findCouponId(params) {
121
+ const code = await this.stripeCouponCodeRepository.findById({ id: params.codeId });
122
+ return code?.coupon?.id;
123
+ }
124
+ };
125
+ exports.StripeCouponCodeService = StripeCouponCodeService;
126
+ exports.StripeCouponCodeService = StripeCouponCodeService = __decorate([
127
+ (0, common_1.Injectable)(),
128
+ __metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
129
+ stripe_coupon_code_repository_1.StripeCouponCodeRepository,
130
+ nestjs_cls_1.ClsService,
131
+ stripe_coupon_repository_1.StripeCouponRepository,
132
+ stripe_coupon_api_service_1.StripeCouponApiService])
133
+ ], StripeCouponCodeService);
134
+ //# sourceMappingURL=stripe-coupon-code.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-coupon-code.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/services/stripe-coupon-code.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import { JsonApiListDocument } from "../../../core/jsonapi/interfaces/jsonapi.document.interface";
3
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
4
+ import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
5
+ import { StripeCouponCode, StripeCouponCodeDescriptor } from "../entities/stripe-coupon-code";
6
+ import { StripeCouponCodeRepository } from "../repositories/stripe-coupon-code.repository";
7
+ /**
8
+ * The public offer: places left on the automatic code, as a synthetic `stripe-coupon-offers`
9
+ * list of 0 or 1 offer. Reads our copy only, never Stripe.
10
+ */
11
+ export declare class StripeCouponOfferService extends AbstractService<StripeCouponCode, typeof StripeCouponCodeDescriptor.relationships> {
12
+ private readonly stripeCouponCodeRepository;
13
+ protected readonly descriptor: import("../../..").EntityDescriptor<StripeCouponCode, {
14
+ coupon: {
15
+ model: import("../../..").DataMeta;
16
+ direction: "in";
17
+ relationship: string;
18
+ cardinality: "one";
19
+ required: true;
20
+ dtoKey: string;
21
+ };
22
+ }>;
23
+ constructor(jsonApiService: JsonApiService, stripeCouponCodeRepository: StripeCouponCodeRepository, clsService: ClsService);
24
+ findPublicOffers(params: {
25
+ query: any;
26
+ }): Promise<JsonApiListDocument>;
27
+ private buildOffer;
28
+ }
29
+ //# sourceMappingURL=stripe-coupon-offer.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-coupon-offer.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/services/stripe-coupon-offer.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAElG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAG3F;;;GAGG;AACH,qBACa,wBAAyB,SAAQ,eAAe,CAC3D,gBAAgB,EAChB,OAAO,0BAA0B,CAAC,aAAa,CAChD;IAKG,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAJ7C,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;OAA8B;gBAGzD,cAAc,EAAE,cAAc,EACb,0BAA0B,EAAE,0BAA0B,EACvE,UAAU,EAAE,UAAU;IAKlB,gBAAgB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAO9D,UAAU;CA2BzB"}