@carlonicora/nestjs-neo4jsonapi 6.2.0 → 6.4.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 (226) hide show
  1. package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
  2. package/dist/bootstrap/app.module.factory.js +1 -0
  3. package/dist/bootstrap/app.module.factory.js.map +1 -1
  4. package/dist/bootstrap/bootstrap.options.d.ts +20 -0
  5. package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
  6. package/dist/core/email/services/email.service.d.ts +2 -0
  7. package/dist/core/email/services/email.service.d.ts.map +1 -1
  8. package/dist/core/email/services/email.service.js +18 -8
  9. package/dist/core/email/services/email.service.js.map +1 -1
  10. package/dist/core/email/templates/en/emailAutomation.hbs +24 -0
  11. package/dist/foundations/auth/controllers/auth.discord.controller.d.ts +1 -1
  12. package/dist/foundations/auth/controllers/auth.discord.controller.d.ts.map +1 -1
  13. package/dist/foundations/auth/controllers/auth.discord.controller.js +6 -3
  14. package/dist/foundations/auth/controllers/auth.discord.controller.js.map +1 -1
  15. package/dist/foundations/auth/controllers/auth.google.controller.d.ts +1 -1
  16. package/dist/foundations/auth/controllers/auth.google.controller.d.ts.map +1 -1
  17. package/dist/foundations/auth/controllers/auth.google.controller.js +6 -3
  18. package/dist/foundations/auth/controllers/auth.google.controller.js.map +1 -1
  19. package/dist/foundations/auth/dtos/auth.post.register.dto.d.ts +6 -0
  20. package/dist/foundations/auth/dtos/auth.post.register.dto.d.ts.map +1 -1
  21. package/dist/foundations/auth/dtos/auth.post.register.dto.js +36 -0
  22. package/dist/foundations/auth/dtos/auth.post.register.dto.js.map +1 -1
  23. package/dist/foundations/auth/events/auth.events.d.ts +7 -0
  24. package/dist/foundations/auth/events/auth.events.d.ts.map +1 -0
  25. package/dist/foundations/auth/events/auth.events.js +6 -0
  26. package/dist/foundations/auth/events/auth.events.js.map +1 -0
  27. package/dist/foundations/auth/index.d.ts +2 -0
  28. package/dist/foundations/auth/index.d.ts.map +1 -1
  29. package/dist/foundations/auth/index.js +3 -1
  30. package/dist/foundations/auth/index.js.map +1 -1
  31. package/dist/foundations/auth/services/auth.discord.service.d.ts +6 -2
  32. package/dist/foundations/auth/services/auth.discord.service.d.ts.map +1 -1
  33. package/dist/foundations/auth/services/auth.discord.service.js +29 -5
  34. package/dist/foundations/auth/services/auth.discord.service.js.map +1 -1
  35. package/dist/foundations/auth/services/auth.google.service.d.ts +6 -2
  36. package/dist/foundations/auth/services/auth.google.service.d.ts.map +1 -1
  37. package/dist/foundations/auth/services/auth.google.service.js +29 -5
  38. package/dist/foundations/auth/services/auth.google.service.js.map +1 -1
  39. package/dist/foundations/auth/services/auth.service.d.ts +15 -1
  40. package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
  41. package/dist/foundations/auth/services/auth.service.js +58 -10
  42. package/dist/foundations/auth/services/auth.service.js.map +1 -1
  43. package/dist/foundations/auth/services/pending-registration.service.d.ts +2 -0
  44. package/dist/foundations/auth/services/pending-registration.service.d.ts.map +1 -1
  45. package/dist/foundations/auth/services/pending-registration.service.js.map +1 -1
  46. package/dist/foundations/email-automation/controllers/email-automation-step.controller.d.ts +22 -0
  47. package/dist/foundations/email-automation/controllers/email-automation-step.controller.d.ts.map +1 -0
  48. package/dist/foundations/email-automation/controllers/email-automation-step.controller.js +152 -0
  49. package/dist/foundations/email-automation/controllers/email-automation-step.controller.js.map +1 -0
  50. package/dist/foundations/email-automation/controllers/email-automation.controller.d.ts +29 -0
  51. package/dist/foundations/email-automation/controllers/email-automation.controller.d.ts.map +1 -0
  52. package/dist/foundations/email-automation/controllers/email-automation.controller.js +183 -0
  53. package/dist/foundations/email-automation/controllers/email-automation.controller.js.map +1 -0
  54. package/dist/foundations/email-automation/controllers/email-automation.public.controller.d.ts +20 -0
  55. package/dist/foundations/email-automation/controllers/email-automation.public.controller.d.ts.map +1 -0
  56. package/dist/foundations/email-automation/controllers/email-automation.public.controller.js +63 -0
  57. package/dist/foundations/email-automation/controllers/email-automation.public.controller.js.map +1 -0
  58. package/dist/foundations/email-automation/cron/email-automation-sender.cron.d.ts +9 -0
  59. package/dist/foundations/email-automation/cron/email-automation-sender.cron.d.ts.map +1 -0
  60. package/dist/foundations/email-automation/cron/email-automation-sender.cron.js +44 -0
  61. package/dist/foundations/email-automation/cron/email-automation-sender.cron.js.map +1 -0
  62. package/dist/foundations/email-automation/dtos/email-automation-step.dto.d.ts +8 -0
  63. package/dist/foundations/email-automation/dtos/email-automation-step.dto.d.ts.map +1 -0
  64. package/dist/foundations/email-automation/dtos/email-automation-step.dto.js +36 -0
  65. package/dist/foundations/email-automation/dtos/email-automation-step.dto.js.map +1 -0
  66. package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.d.ts +16 -0
  67. package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.d.ts.map +1 -0
  68. package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.js +72 -0
  69. package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.js.map +1 -0
  70. package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.d.ts +21 -0
  71. package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.d.ts.map +1 -0
  72. package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.js +88 -0
  73. package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.js.map +1 -0
  74. package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.d.ts +11 -0
  75. package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.d.ts.map +1 -0
  76. package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.js +47 -0
  77. package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.js.map +1 -0
  78. package/dist/foundations/email-automation/dtos/email-automation.dto.d.ts +8 -0
  79. package/dist/foundations/email-automation/dtos/email-automation.dto.d.ts.map +1 -0
  80. package/dist/foundations/email-automation/dtos/email-automation.dto.js +36 -0
  81. package/dist/foundations/email-automation/dtos/email-automation.dto.js.map +1 -0
  82. package/dist/foundations/email-automation/dtos/email-automation.patch.dto.d.ts +16 -0
  83. package/dist/foundations/email-automation/dtos/email-automation.patch.dto.d.ts.map +1 -0
  84. package/dist/foundations/email-automation/dtos/email-automation.patch.dto.js +72 -0
  85. package/dist/foundations/email-automation/dtos/email-automation.patch.dto.js.map +1 -0
  86. package/dist/foundations/email-automation/dtos/email-automation.post.dto.d.ts +16 -0
  87. package/dist/foundations/email-automation/dtos/email-automation.post.dto.d.ts.map +1 -0
  88. package/dist/foundations/email-automation/dtos/email-automation.post.dto.js +72 -0
  89. package/dist/foundations/email-automation/dtos/email-automation.post.dto.js.map +1 -0
  90. package/dist/foundations/email-automation/email-automation.module.d.ts +35 -0
  91. package/dist/foundations/email-automation/email-automation.module.d.ts.map +1 -0
  92. package/dist/foundations/email-automation/email-automation.module.js +122 -0
  93. package/dist/foundations/email-automation/email-automation.module.js.map +1 -0
  94. package/dist/foundations/email-automation/entities/email-automation-enrollment.d.ts +55 -0
  95. package/dist/foundations/email-automation/entities/email-automation-enrollment.d.ts.map +1 -0
  96. package/dist/foundations/email-automation/entities/email-automation-enrollment.js +74 -0
  97. package/dist/foundations/email-automation/entities/email-automation-enrollment.js.map +1 -0
  98. package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.d.ts +3 -0
  99. package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.d.ts.map +1 -0
  100. package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.js +10 -0
  101. package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.js.map +1 -0
  102. package/dist/foundations/email-automation/entities/email-automation-step.d.ts +32 -0
  103. package/dist/foundations/email-automation/entities/email-automation-step.d.ts.map +1 -0
  104. package/dist/foundations/email-automation/entities/email-automation-step.js +55 -0
  105. package/dist/foundations/email-automation/entities/email-automation-step.js.map +1 -0
  106. package/dist/foundations/email-automation/entities/email-automation-step.meta.d.ts +3 -0
  107. package/dist/foundations/email-automation/entities/email-automation-step.meta.d.ts.map +1 -0
  108. package/dist/foundations/email-automation/entities/email-automation-step.meta.js +10 -0
  109. package/dist/foundations/email-automation/entities/email-automation-step.meta.js.map +1 -0
  110. package/dist/foundations/email-automation/entities/email-automation-trigger.d.ts +11 -0
  111. package/dist/foundations/email-automation/entities/email-automation-trigger.d.ts.map +1 -0
  112. package/dist/foundations/email-automation/entities/email-automation-trigger.js +15 -0
  113. package/dist/foundations/email-automation/entities/email-automation-trigger.js.map +1 -0
  114. package/dist/foundations/email-automation/entities/email-automation-trigger.meta.d.ts +6 -0
  115. package/dist/foundations/email-automation/entities/email-automation-trigger.meta.d.ts.map +1 -0
  116. package/dist/foundations/email-automation/entities/email-automation-trigger.meta.js +13 -0
  117. package/dist/foundations/email-automation/entities/email-automation-trigger.meta.js.map +1 -0
  118. package/dist/foundations/email-automation/entities/email-automation.d.ts +26 -0
  119. package/dist/foundations/email-automation/entities/email-automation.d.ts.map +1 -0
  120. package/dist/foundations/email-automation/entities/email-automation.js +54 -0
  121. package/dist/foundations/email-automation/entities/email-automation.js.map +1 -0
  122. package/dist/foundations/email-automation/entities/email-automation.meta.d.ts +7 -0
  123. package/dist/foundations/email-automation/entities/email-automation.meta.d.ts.map +1 -0
  124. package/dist/foundations/email-automation/entities/email-automation.meta.js +14 -0
  125. package/dist/foundations/email-automation/entities/email-automation.meta.js.map +1 -0
  126. package/dist/foundations/email-automation/entities/email-opt-out.d.ts +9 -0
  127. package/dist/foundations/email-automation/entities/email-opt-out.d.ts.map +1 -0
  128. package/dist/foundations/email-automation/entities/email-opt-out.js +17 -0
  129. package/dist/foundations/email-automation/entities/email-opt-out.js.map +1 -0
  130. package/dist/foundations/email-automation/entities/email-opt-out.meta.d.ts +3 -0
  131. package/dist/foundations/email-automation/entities/email-opt-out.meta.d.ts.map +1 -0
  132. package/dist/foundations/email-automation/entities/email-opt-out.meta.js +10 -0
  133. package/dist/foundations/email-automation/entities/email-opt-out.meta.js.map +1 -0
  134. package/dist/foundations/email-automation/index.d.ts +32 -0
  135. package/dist/foundations/email-automation/index.d.ts.map +1 -0
  136. package/dist/foundations/email-automation/index.js +56 -0
  137. package/dist/foundations/email-automation/index.js.map +1 -0
  138. package/dist/foundations/email-automation/interfaces/email-automation.config.interface.d.ts +49 -0
  139. package/dist/foundations/email-automation/interfaces/email-automation.config.interface.d.ts.map +1 -0
  140. package/dist/foundations/email-automation/interfaces/email-automation.config.interface.js +14 -0
  141. package/dist/foundations/email-automation/interfaces/email-automation.config.interface.js.map +1 -0
  142. package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.d.ts +150 -0
  143. package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.d.ts.map +1 -0
  144. package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.js +379 -0
  145. package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.js.map +1 -0
  146. package/dist/foundations/email-automation/repositories/email-automation-step.repository.d.ts +64 -0
  147. package/dist/foundations/email-automation/repositories/email-automation-step.repository.d.ts.map +1 -0
  148. package/dist/foundations/email-automation/repositories/email-automation-step.repository.js +156 -0
  149. package/dist/foundations/email-automation/repositories/email-automation-step.repository.js.map +1 -0
  150. package/dist/foundations/email-automation/repositories/email-automation.repository.d.ts +36 -0
  151. package/dist/foundations/email-automation/repositories/email-automation.repository.d.ts.map +1 -0
  152. package/dist/foundations/email-automation/repositories/email-automation.repository.js +93 -0
  153. package/dist/foundations/email-automation/repositories/email-automation.repository.js.map +1 -0
  154. package/dist/foundations/email-automation/repositories/email-opt-out.repository.d.ts +25 -0
  155. package/dist/foundations/email-automation/repositories/email-opt-out.repository.d.ts.map +1 -0
  156. package/dist/foundations/email-automation/repositories/email-opt-out.repository.js +69 -0
  157. package/dist/foundations/email-automation/repositories/email-opt-out.repository.js.map +1 -0
  158. package/dist/foundations/email-automation/services/email-automation-renderer.service.d.ts +35 -0
  159. package/dist/foundations/email-automation/services/email-automation-renderer.service.d.ts.map +1 -0
  160. package/dist/foundations/email-automation/services/email-automation-renderer.service.js +109 -0
  161. package/dist/foundations/email-automation/services/email-automation-renderer.service.js.map +1 -0
  162. package/dist/foundations/email-automation/services/email-automation-sender.service.d.ts +31 -0
  163. package/dist/foundations/email-automation/services/email-automation-sender.service.d.ts.map +1 -0
  164. package/dist/foundations/email-automation/services/email-automation-sender.service.js +129 -0
  165. package/dist/foundations/email-automation/services/email-automation-sender.service.js.map +1 -0
  166. package/dist/foundations/email-automation/services/email-automation-step.service.d.ts +60 -0
  167. package/dist/foundations/email-automation/services/email-automation-step.service.d.ts.map +1 -0
  168. package/dist/foundations/email-automation/services/email-automation-step.service.js +101 -0
  169. package/dist/foundations/email-automation/services/email-automation-step.service.js.map +1 -0
  170. package/dist/foundations/email-automation/services/email-automation-trigger.service.d.ts +28 -0
  171. package/dist/foundations/email-automation/services/email-automation-trigger.service.d.ts.map +1 -0
  172. package/dist/foundations/email-automation/services/email-automation-trigger.service.js +125 -0
  173. package/dist/foundations/email-automation/services/email-automation-trigger.service.js.map +1 -0
  174. package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.d.ts +53 -0
  175. package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.d.ts.map +1 -0
  176. package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.js +67 -0
  177. package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.js.map +1 -0
  178. package/dist/foundations/email-automation/services/email-automation.service.d.ts +53 -0
  179. package/dist/foundations/email-automation/services/email-automation.service.d.ts.map +1 -0
  180. package/dist/foundations/email-automation/services/email-automation.service.js +90 -0
  181. package/dist/foundations/email-automation/services/email-automation.service.js.map +1 -0
  182. package/dist/foundations/email-automation/triggers/built-in.triggers.d.ts +10 -0
  183. package/dist/foundations/email-automation/triggers/built-in.triggers.d.ts.map +1 -0
  184. package/dist/foundations/email-automation/triggers/built-in.triggers.js +50 -0
  185. package/dist/foundations/email-automation/triggers/built-in.triggers.js.map +1 -0
  186. package/dist/foundations/foundations.modules.d.ts +3 -0
  187. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  188. package/dist/foundations/foundations.modules.js +7 -1
  189. package/dist/foundations/foundations.modules.js.map +1 -1
  190. package/dist/foundations/index.d.ts +1 -0
  191. package/dist/foundations/index.d.ts.map +1 -1
  192. package/dist/foundations/index.js +1 -0
  193. package/dist/foundations/index.js.map +1 -1
  194. package/dist/foundations/user/entities/user.d.ts +6 -0
  195. package/dist/foundations/user/entities/user.d.ts.map +1 -1
  196. package/dist/foundations/user/entities/user.js +7 -0
  197. package/dist/foundations/user/entities/user.js.map +1 -1
  198. package/dist/foundations/user/repositories/user.repository.d.ts +9 -0
  199. package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
  200. package/dist/foundations/user/repositories/user.repository.js +23 -0
  201. package/dist/foundations/user/repositories/user.repository.js.map +1 -1
  202. package/dist/foundations/waitlist/dtos/waitlist.post.dto.d.ts +6 -0
  203. package/dist/foundations/waitlist/dtos/waitlist.post.dto.d.ts.map +1 -1
  204. package/dist/foundations/waitlist/dtos/waitlist.post.dto.js +36 -0
  205. package/dist/foundations/waitlist/dtos/waitlist.post.dto.js.map +1 -1
  206. package/dist/foundations/waitlist/entities/waitlist.d.ts +6 -0
  207. package/dist/foundations/waitlist/entities/waitlist.d.ts.map +1 -1
  208. package/dist/foundations/waitlist/entities/waitlist.js +6 -0
  209. package/dist/foundations/waitlist/entities/waitlist.js.map +1 -1
  210. package/dist/foundations/waitlist/events/waitlist.events.d.ts +7 -0
  211. package/dist/foundations/waitlist/events/waitlist.events.d.ts.map +1 -0
  212. package/dist/foundations/waitlist/events/waitlist.events.js +6 -0
  213. package/dist/foundations/waitlist/events/waitlist.events.js.map +1 -0
  214. package/dist/foundations/waitlist/index.d.ts +4 -0
  215. package/dist/foundations/waitlist/index.d.ts.map +1 -1
  216. package/dist/foundations/waitlist/index.js +11 -1
  217. package/dist/foundations/waitlist/index.js.map +1 -1
  218. package/dist/foundations/waitlist/services/waitlist.service.d.ts +5 -2
  219. package/dist/foundations/waitlist/services/waitlist.service.d.ts.map +1 -1
  220. package/dist/foundations/waitlist/services/waitlist.service.js +33 -18
  221. package/dist/foundations/waitlist/services/waitlist.service.js.map +1 -1
  222. package/dist/foundations/waitlist/utils/signup-source.d.ts +24 -0
  223. package/dist/foundations/waitlist/utils/signup-source.d.ts.map +1 -0
  224. package/dist/foundations/waitlist/utils/signup-source.js +52 -0
  225. package/dist/foundations/waitlist/utils/signup-source.js.map +1 -0
  226. package/package.json +1 -1
@@ -0,0 +1,379 @@
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.EmailAutomationEnrollmentRepository = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_cls_1 = require("nestjs-cls");
15
+ const abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
16
+ const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
17
+ const security_service_1 = require("../../../core/security/services/security.service");
18
+ const email_automation_enrollment_1 = require("../entities/email-automation-enrollment");
19
+ const email_automation_enrollment_meta_1 = require("../entities/email-automation-enrollment.meta");
20
+ const email_automation_step_meta_1 = require("../entities/email-automation-step.meta");
21
+ const email_automation_meta_1 = require("../entities/email-automation.meta");
22
+ let EmailAutomationEnrollmentRepository = class EmailAutomationEnrollmentRepository extends abstract_repository_1.AbstractRepository {
23
+ constructor(neo4j, securityService, clsService) {
24
+ super(neo4j, securityService, clsService);
25
+ this.descriptor = email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor;
26
+ }
27
+ /**
28
+ * Enrolment + automation + current step, with the current step's subject
29
+ * (`currentStepSubject`) and the number of steps sent (`sentCount`). The SENT
30
+ * steps themselves are not returned: the count is what every reader needs.
31
+ */
32
+ buildReturnStatement() {
33
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
34
+ const automationAlias = `${nodeName}_automation`;
35
+ const currentStepAlias = `${nodeName}_currentStep`;
36
+ return `
37
+ MATCH (${nodeName})<-[:HAS_ENROLLMENT]-(${automationAlias}:${email_automation_meta_1.emailAutomationMeta.labelName})
38
+ OPTIONAL MATCH (${nodeName})-[:AT_STEP]->(${currentStepAlias}:${email_automation_step_meta_1.emailAutomationStepMeta.labelName})
39
+ CALL {
40
+ WITH ${nodeName}
41
+ OPTIONAL MATCH (${nodeName})-[sentEdge:SENT]->(:${email_automation_step_meta_1.emailAutomationStepMeta.labelName})
42
+ RETURN count(sentEdge) AS sentCount
43
+ }
44
+ RETURN ${nodeName},
45
+ ${automationAlias},
46
+ ${currentStepAlias},
47
+ ${currentStepAlias}.subject AS currentStepSubject,
48
+ sentCount
49
+ `;
50
+ }
51
+ /**
52
+ * Creates an active enrolment of `recipient` in an automation, waiting on `stepId`.
53
+ */
54
+ async createEnrollment(params) {
55
+ const { nodeName, labelName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
56
+ const query = this.neo4j.initQuery();
57
+ query.queryParams = {
58
+ ...query.queryParams,
59
+ id: params.id,
60
+ automationId: params.automationId,
61
+ stepId: params.stepId,
62
+ email: params.recipient.email,
63
+ name: params.recipient.name ?? null,
64
+ recipientType: params.recipient.recipientType,
65
+ recipientId: params.recipient.recipientId,
66
+ status: "active",
67
+ enrolledAt: params.enrolledAt.toISOString(),
68
+ nextSendAt: params.nextSendAt.toISOString(),
69
+ unsubscribeToken: params.unsubscribeToken,
70
+ };
71
+ query.query += `
72
+ MATCH (${nodeName}_automation:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})
73
+ MATCH (${nodeName}_step:${email_automation_step_meta_1.emailAutomationStepMeta.labelName} {id: $stepId})
74
+ CREATE (${nodeName}:${labelName} {
75
+ id: $id,
76
+ email: $email,
77
+ name: $name,
78
+ recipientType: $recipientType,
79
+ recipientId: $recipientId,
80
+ status: $status,
81
+ attempts: 0,
82
+ enrolledAt: datetime($enrolledAt),
83
+ nextSendAt: datetime($nextSendAt),
84
+ unsubscribeToken: $unsubscribeToken,
85
+ createdAt: datetime(),
86
+ updatedAt: datetime()
87
+ })
88
+ CREATE (${nodeName}_automation)-[:HAS_ENROLLMENT]->(${nodeName})
89
+ CREATE (${nodeName})-[:AT_STEP]->(${nodeName}_step)
90
+ `;
91
+ await this.neo4j.writeOne(query);
92
+ }
93
+ /**
94
+ * The enrolment of an email in an automation, whatever its status (latest first).
95
+ */
96
+ async findByAutomationAndEmail(params) {
97
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
98
+ const query = this.neo4j.initQuery({ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model });
99
+ query.queryParams = {
100
+ ...query.queryParams,
101
+ automationId: params.automationId,
102
+ email: params.email.toLowerCase(),
103
+ };
104
+ query.query += `
105
+ ${this.buildDefaultMatch()}
106
+ WHERE toLower(${nodeName}.email) = $email
107
+ AND EXISTS {
108
+ MATCH (${nodeName})<-[:HAS_ENROLLMENT]-(:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})
109
+ }
110
+ WITH ${nodeName}
111
+ ORDER BY ${nodeName}.enrolledAt DESC
112
+ LIMIT 1
113
+ ${this.buildReturnStatement()}
114
+ `;
115
+ return this.neo4j.readOne(query);
116
+ }
117
+ /**
118
+ * Every active enrolment of an email, in any automation.
119
+ */
120
+ async findActiveByEmail(params) {
121
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
122
+ const query = this.neo4j.initQuery({ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model });
123
+ query.queryParams = {
124
+ ...query.queryParams,
125
+ email: params.email.toLowerCase(),
126
+ status: "active",
127
+ };
128
+ query.query += `
129
+ ${this.buildDefaultMatch()}
130
+ WHERE toLower(${nodeName}.email) = $email AND ${nodeName}.status = $status
131
+ WITH ${nodeName}
132
+ ${this.buildReturnStatement()}
133
+ `;
134
+ return this.neo4j.readMany(query);
135
+ }
136
+ /**
137
+ * The active enrolments of an email in one automation.
138
+ */
139
+ async findActiveByEmailAndAutomation(params) {
140
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
141
+ const query = this.neo4j.initQuery({ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model });
142
+ query.queryParams = {
143
+ ...query.queryParams,
144
+ email: params.email.toLowerCase(),
145
+ automationId: params.automationId,
146
+ status: "active",
147
+ };
148
+ query.query += `
149
+ ${this.buildDefaultMatch()}
150
+ WHERE toLower(${nodeName}.email) = $email AND ${nodeName}.status = $status
151
+ AND EXISTS {
152
+ MATCH (${nodeName})<-[:HAS_ENROLLMENT]-(:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})
153
+ }
154
+ WITH ${nodeName}
155
+ ${this.buildReturnStatement()}
156
+ `;
157
+ return this.neo4j.readMany(query);
158
+ }
159
+ /**
160
+ * The enrolment an unsubscribe link belongs to.
161
+ */
162
+ async findByUnsubscribeToken(params) {
163
+ const query = this.neo4j.initQuery({ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model });
164
+ query.queryParams = { ...query.queryParams, searchValue: params.token };
165
+ query.query += `
166
+ ${this.buildDefaultMatch({ searchField: "unsubscribeToken" })}
167
+ ${this.buildReturnStatement()}
168
+ `;
169
+ return this.neo4j.readOne(query);
170
+ }
171
+ /**
172
+ * Bounded worker query: active enrolments whose next send is due, in active
173
+ * automations, oldest due first. Automation and current step are included.
174
+ */
175
+ async findDue(params) {
176
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
177
+ const query = this.neo4j.initQuery({ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model });
178
+ query.queryParams = {
179
+ ...query.queryParams,
180
+ now: params.now.toISOString(),
181
+ limit: params.limit,
182
+ status: "active",
183
+ };
184
+ query.query += `
185
+ ${this.buildDefaultMatch()}
186
+ WHERE ${nodeName}.status = $status
187
+ AND ${nodeName}.nextSendAt <= datetime($now)
188
+ AND EXISTS {
189
+ MATCH (${nodeName})<-[:HAS_ENROLLMENT]-(${email_automation_meta_1.emailAutomationMeta.nodeName}:${email_automation_meta_1.emailAutomationMeta.labelName})
190
+ WHERE ${email_automation_meta_1.emailAutomationMeta.nodeName}.isActive = true
191
+ }
192
+ WITH ${nodeName}
193
+ ORDER BY ${nodeName}.nextSendAt ASC
194
+ LIMIT toInteger($limit)
195
+ ${this.buildReturnStatement()}
196
+ `;
197
+ return this.neo4j.readMany(query);
198
+ }
199
+ /**
200
+ * Whether the enrolment already received the step (a SENT edge exists).
201
+ */
202
+ async hasSent(params) {
203
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
204
+ const query = this.neo4j.initQuery({ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model });
205
+ query.queryParams = { ...query.queryParams, searchValue: params.enrollmentId, stepId: params.stepId };
206
+ query.query += `
207
+ ${this.buildDefaultMatch({ searchField: "id" })}
208
+ WHERE EXISTS {
209
+ MATCH (${nodeName})-[:SENT]->(:${email_automation_step_meta_1.emailAutomationStepMeta.labelName} {id: $stepId})
210
+ }
211
+ WITH ${nodeName}
212
+ ${this.buildReturnStatement()}
213
+ `;
214
+ return !!(await this.neo4j.readOne(query));
215
+ }
216
+ /**
217
+ * Records that the step was sent and resets the failure counters.
218
+ */
219
+ async markSent(params) {
220
+ const { nodeName, labelName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
221
+ const query = this.neo4j.initQuery();
222
+ query.queryParams = {
223
+ ...query.queryParams,
224
+ enrollmentId: params.enrollmentId,
225
+ stepId: params.stepId,
226
+ sentAt: params.sentAt.toISOString(),
227
+ };
228
+ query.query += `
229
+ MATCH (${nodeName}:${labelName} {id: $enrollmentId})
230
+ MATCH (${nodeName}_step:${email_automation_step_meta_1.emailAutomationStepMeta.labelName} {id: $stepId})
231
+ MERGE (${nodeName})-[sentEdge:SENT]->(${nodeName}_step)
232
+ SET sentEdge.sentAt = datetime($sentAt),
233
+ ${nodeName}.attempts = 0,
234
+ ${nodeName}.lastError = null,
235
+ ${nodeName}.updatedAt = datetime()
236
+ `;
237
+ await this.neo4j.writeOne(query);
238
+ }
239
+ /**
240
+ * Moves the enrolment to the next step and schedules it.
241
+ */
242
+ async advance(params) {
243
+ const { nodeName, labelName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
244
+ const query = this.neo4j.initQuery();
245
+ query.queryParams = {
246
+ ...query.queryParams,
247
+ enrollmentId: params.enrollmentId,
248
+ nextStepId: params.nextStepId,
249
+ nextSendAt: params.nextSendAt.toISOString(),
250
+ };
251
+ query.query += `
252
+ MATCH (${nodeName}:${labelName} {id: $enrollmentId})
253
+ OPTIONAL MATCH (${nodeName})-[currentStep:AT_STEP]->()
254
+ DELETE currentStep
255
+ WITH DISTINCT ${nodeName}
256
+ MATCH (${nodeName}_next:${email_automation_step_meta_1.emailAutomationStepMeta.labelName} {id: $nextStepId})
257
+ CREATE (${nodeName})-[:AT_STEP]->(${nodeName}_next)
258
+ SET ${nodeName}.nextSendAt = datetime($nextSendAt),
259
+ ${nodeName}.updatedAt = datetime()
260
+ `;
261
+ await this.neo4j.writeOne(query);
262
+ }
263
+ /**
264
+ * Ends the enrolment: no current step, no next send.
265
+ */
266
+ async finish(params) {
267
+ const { nodeName, labelName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
268
+ const query = this.neo4j.initQuery();
269
+ query.queryParams = {
270
+ ...query.queryParams,
271
+ enrollmentId: params.enrollmentId,
272
+ status: params.status,
273
+ finishedAt: params.finishedAt.toISOString(),
274
+ };
275
+ query.query += `
276
+ MATCH (${nodeName}:${labelName} {id: $enrollmentId})
277
+ OPTIONAL MATCH (${nodeName})-[currentStep:AT_STEP]->()
278
+ DELETE currentStep
279
+ WITH DISTINCT ${nodeName}
280
+ SET ${nodeName}.status = $status,
281
+ ${nodeName}.nextSendAt = null,
282
+ ${nodeName}.finishedAt = datetime($finishedAt),
283
+ ${nodeName}.updatedAt = datetime()
284
+ `;
285
+ await this.neo4j.writeOne(query);
286
+ }
287
+ /**
288
+ * Counts a failed send and schedules the retry.
289
+ */
290
+ async recordFailure(params) {
291
+ const { nodeName, labelName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
292
+ const query = this.neo4j.initQuery();
293
+ query.queryParams = {
294
+ ...query.queryParams,
295
+ enrollmentId: params.enrollmentId,
296
+ error: params.error,
297
+ nextSendAt: params.nextSendAt.toISOString(),
298
+ };
299
+ query.query += `
300
+ MATCH (${nodeName}:${labelName} {id: $enrollmentId})
301
+ SET ${nodeName}.attempts = coalesce(${nodeName}.attempts, 0) + 1,
302
+ ${nodeName}.lastError = $error,
303
+ ${nodeName}.nextSendAt = datetime($nextSendAt),
304
+ ${nodeName}.updatedAt = datetime()
305
+ `;
306
+ await this.neo4j.writeOne(query);
307
+ }
308
+ /**
309
+ * Moves every active enrolment waiting on `fromStepId` to `toStepId`; with no
310
+ * successor (`toStepId` null) those enrolments are completed instead.
311
+ */
312
+ async repointStep(params) {
313
+ const { nodeName, labelName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
314
+ const stepLabel = email_automation_step_meta_1.emailAutomationStepMeta.labelName;
315
+ const query = this.neo4j.initQuery();
316
+ query.queryParams = {
317
+ ...query.queryParams,
318
+ fromStepId: params.fromStepId,
319
+ toStepId: params.toStepId,
320
+ activeStatus: "active",
321
+ completedStatus: "completed",
322
+ finishedAt: params.finishedAt.toISOString(),
323
+ };
324
+ if (params.toStepId) {
325
+ query.query += `
326
+ MATCH (:${stepLabel} {id: $fromStepId})<-[currentStep:AT_STEP]-(${nodeName}:${labelName} {status: $activeStatus})
327
+ MATCH (${nodeName}_next:${stepLabel} {id: $toStepId})
328
+ DELETE currentStep
329
+ CREATE (${nodeName})-[:AT_STEP]->(${nodeName}_next)
330
+ SET ${nodeName}.updatedAt = datetime()
331
+ `;
332
+ }
333
+ else {
334
+ query.query += `
335
+ MATCH (:${stepLabel} {id: $fromStepId})<-[currentStep:AT_STEP]-(${nodeName}:${labelName} {status: $activeStatus})
336
+ DELETE currentStep
337
+ SET ${nodeName}.status = $completedStatus,
338
+ ${nodeName}.nextSendAt = null,
339
+ ${nodeName}.finishedAt = datetime($finishedAt),
340
+ ${nodeName}.updatedAt = datetime()
341
+ `;
342
+ }
343
+ await this.neo4j.writeOne(query);
344
+ }
345
+ /**
346
+ * The enrolments of an automation, newest first, optionally filtered by status.
347
+ */
348
+ async findByAutomation(params) {
349
+ const { nodeName } = email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta;
350
+ const query = this.neo4j.initQuery({
351
+ serialiser: email_automation_enrollment_1.EmailAutomationEnrollmentDescriptor.model,
352
+ cursor: params.cursor,
353
+ });
354
+ const statusFilter = params.status ? `AND ${nodeName}.status = $status` : "";
355
+ query.queryParams = {
356
+ ...query.queryParams,
357
+ automationId: params.automationId,
358
+ status: params.status ?? null,
359
+ };
360
+ query.query += `
361
+ ${this.buildDefaultMatch()}
362
+ WHERE EXISTS {
363
+ MATCH (${nodeName})<-[:HAS_ENROLLMENT]-(:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})
364
+ }
365
+ ${statusFilter}
366
+ WITH ${nodeName}
367
+ ORDER BY ${nodeName}.enrolledAt DESC
368
+ {CURSOR}
369
+ ${this.buildReturnStatement()}
370
+ `;
371
+ return this.neo4j.readMany(query);
372
+ }
373
+ };
374
+ exports.EmailAutomationEnrollmentRepository = EmailAutomationEnrollmentRepository;
375
+ exports.EmailAutomationEnrollmentRepository = EmailAutomationEnrollmentRepository = __decorate([
376
+ (0, common_1.Injectable)(),
377
+ __metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
378
+ ], EmailAutomationEnrollmentRepository);
379
+ //# sourceMappingURL=email-automation-enrollment.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-automation-enrollment.repository.js","sourceRoot":"","sources":["../../../../src/foundations/email-automation/repositories/email-automation-enrollment.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import { AbstractRepository } from "../../../core/neo4j/abstracts/abstract.repository";
3
+ import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
4
+ import { SecurityService } from "../../../core/security/services/security.service";
5
+ import { EmailAutomationStep, EmailAutomationStepDescriptor } from "../entities/email-automation-step";
6
+ export declare class EmailAutomationStepRepository extends AbstractRepository<EmailAutomationStep, typeof EmailAutomationStepDescriptor.relationships> {
7
+ protected readonly descriptor: import("../../..").EntityDescriptor<EmailAutomationStep, {
8
+ automation: {
9
+ model: import("../../..").DataMeta;
10
+ direction: "in";
11
+ relationship: string;
12
+ cardinality: "one";
13
+ required: true;
14
+ dtoKey: string;
15
+ };
16
+ next: {
17
+ model: import("../../..").DataMeta;
18
+ direction: "out";
19
+ relationship: string;
20
+ cardinality: "one";
21
+ required: false;
22
+ dtoKey: string;
23
+ };
24
+ }>;
25
+ constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
26
+ /**
27
+ * Step + automation + next step, with the number of enrolments that received
28
+ * the step (`sentCount`) and the same count for the included next step
29
+ * (`<alias>_sentCount`, read by the descriptor's computed field).
30
+ */
31
+ protected buildReturnStatement(): string;
32
+ /**
33
+ * Every step of an automation, oldest first, with its `next` step included.
34
+ */
35
+ findByAutomation(params: {
36
+ automationId: string;
37
+ }): Promise<EmailAutomationStep[]>;
38
+ /**
39
+ * The first step of an automation: no incoming NEXT, oldest first.
40
+ */
41
+ findHead(params: {
42
+ automationId: string;
43
+ }): Promise<EmailAutomationStep | null>;
44
+ /**
45
+ * Replaces the outgoing NEXT link of a step; `nextStepId` null only removes it.
46
+ */
47
+ setNext(params: {
48
+ stepId: string;
49
+ nextStepId: string | null;
50
+ }): Promise<void>;
51
+ /**
52
+ * The step whose NEXT points at `stepId`.
53
+ */
54
+ findPrevious(params: {
55
+ stepId: string;
56
+ }): Promise<EmailAutomationStep | null>;
57
+ /**
58
+ * Drops every manual canvas position of an automation's steps, so the canvas re-runs auto-layout.
59
+ */
60
+ clearPositions(params: {
61
+ automationId: string;
62
+ }): Promise<void>;
63
+ }
64
+ //# sourceMappingURL=email-automation-step.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-automation-step.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/email-automation/repositories/email-automation-step.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AAEnF,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAIvG,qBACa,6BAA8B,SAAQ,kBAAkB,CACnE,mBAAmB,EACnB,OAAO,6BAA6B,CAAC,aAAa,CACnD;IACC,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;OAAiC;gBAElD,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,IAAI,MAAM;IA0BxC;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAmBxF;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAuBrF;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBnF;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAkBnF;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CActE"}
@@ -0,0 +1,156 @@
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.EmailAutomationStepRepository = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_cls_1 = require("nestjs-cls");
15
+ const abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
16
+ const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
17
+ const security_service_1 = require("../../../core/security/services/security.service");
18
+ const email_automation_enrollment_meta_1 = require("../entities/email-automation-enrollment.meta");
19
+ const email_automation_step_1 = require("../entities/email-automation-step");
20
+ const email_automation_step_meta_1 = require("../entities/email-automation-step.meta");
21
+ const email_automation_meta_1 = require("../entities/email-automation.meta");
22
+ let EmailAutomationStepRepository = class EmailAutomationStepRepository extends abstract_repository_1.AbstractRepository {
23
+ constructor(neo4j, securityService, clsService) {
24
+ super(neo4j, securityService, clsService);
25
+ this.descriptor = email_automation_step_1.EmailAutomationStepDescriptor;
26
+ }
27
+ /**
28
+ * Step + automation + next step, with the number of enrolments that received
29
+ * the step (`sentCount`) and the same count for the included next step
30
+ * (`<alias>_sentCount`, read by the descriptor's computed field).
31
+ */
32
+ buildReturnStatement() {
33
+ const { nodeName } = email_automation_step_meta_1.emailAutomationStepMeta;
34
+ const automationAlias = `${nodeName}_automation`;
35
+ const nextAlias = `${nodeName}_next`;
36
+ return `
37
+ MATCH (${nodeName})<-[:HAS_STEP]-(${automationAlias}:${email_automation_meta_1.emailAutomationMeta.labelName})
38
+ OPTIONAL MATCH (${nodeName})-[:NEXT]->(${nextAlias}:${email_automation_step_meta_1.emailAutomationStepMeta.labelName})
39
+ CALL {
40
+ WITH ${nodeName}
41
+ OPTIONAL MATCH (${nodeName})<-[sentEdge:SENT]-(:${email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta.labelName})
42
+ RETURN count(sentEdge) AS sentCount
43
+ }
44
+ CALL {
45
+ WITH ${nextAlias}
46
+ OPTIONAL MATCH (${nextAlias})<-[nextSentEdge:SENT]-(:${email_automation_enrollment_meta_1.emailAutomationEnrollmentMeta.labelName})
47
+ RETURN count(nextSentEdge) AS ${nextAlias}_sentCount
48
+ }
49
+ RETURN ${nodeName},
50
+ ${automationAlias},
51
+ ${nextAlias},
52
+ sentCount,
53
+ ${nextAlias}_sentCount
54
+ `;
55
+ }
56
+ /**
57
+ * Every step of an automation, oldest first, with its `next` step included.
58
+ */
59
+ async findByAutomation(params) {
60
+ const { nodeName } = email_automation_step_meta_1.emailAutomationStepMeta;
61
+ const query = this.neo4j.initQuery({ serialiser: email_automation_step_1.EmailAutomationStepDescriptor.model });
62
+ query.queryParams = { ...query.queryParams, automationId: params.automationId };
63
+ query.query += `
64
+ ${this.buildDefaultMatch()}
65
+ WHERE EXISTS {
66
+ MATCH (${nodeName})<-[:HAS_STEP]-(:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})
67
+ }
68
+ WITH ${nodeName}
69
+ ORDER BY ${nodeName}.createdAt ASC
70
+ ${this.buildReturnStatement()}
71
+ `;
72
+ return this.neo4j.readMany(query);
73
+ }
74
+ /**
75
+ * The first step of an automation: no incoming NEXT, oldest first.
76
+ */
77
+ async findHead(params) {
78
+ const { nodeName, labelName } = email_automation_step_meta_1.emailAutomationStepMeta;
79
+ const query = this.neo4j.initQuery({ serialiser: email_automation_step_1.EmailAutomationStepDescriptor.model });
80
+ query.queryParams = { ...query.queryParams, automationId: params.automationId };
81
+ query.query += `
82
+ ${this.buildDefaultMatch()}
83
+ WHERE EXISTS {
84
+ MATCH (${nodeName})<-[:HAS_STEP]-(:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})
85
+ }
86
+ AND NOT EXISTS {
87
+ MATCH (:${labelName})-[:NEXT]->(${nodeName})
88
+ }
89
+ WITH ${nodeName}
90
+ ORDER BY ${nodeName}.createdAt ASC
91
+ LIMIT 1
92
+ ${this.buildReturnStatement()}
93
+ `;
94
+ return this.neo4j.readOne(query);
95
+ }
96
+ /**
97
+ * Replaces the outgoing NEXT link of a step; `nextStepId` null only removes it.
98
+ */
99
+ async setNext(params) {
100
+ const { nodeName, labelName } = email_automation_step_meta_1.emailAutomationStepMeta;
101
+ const query = this.neo4j.initQuery();
102
+ query.queryParams = { ...query.queryParams, stepId: params.stepId, nextStepId: params.nextStepId };
103
+ query.query += `
104
+ MATCH (${nodeName}:${labelName} {id: $stepId})
105
+ OPTIONAL MATCH (${nodeName})-[existingNext:NEXT]->()
106
+ DELETE existingNext
107
+ WITH DISTINCT ${nodeName}
108
+ SET ${nodeName}.updatedAt = datetime()
109
+ `;
110
+ if (params.nextStepId) {
111
+ query.query += `
112
+ WITH ${nodeName}
113
+ MATCH (${nodeName}_next:${labelName} {id: $nextStepId})
114
+ MERGE (${nodeName})-[:NEXT]->(${nodeName}_next)
115
+ `;
116
+ }
117
+ await this.neo4j.writeOne(query);
118
+ }
119
+ /**
120
+ * The step whose NEXT points at `stepId`.
121
+ */
122
+ async findPrevious(params) {
123
+ const { nodeName, labelName } = email_automation_step_meta_1.emailAutomationStepMeta;
124
+ const query = this.neo4j.initQuery({ serialiser: email_automation_step_1.EmailAutomationStepDescriptor.model });
125
+ query.queryParams = { ...query.queryParams, stepId: params.stepId };
126
+ query.query += `
127
+ ${this.buildDefaultMatch()}
128
+ WHERE EXISTS {
129
+ MATCH (${nodeName})-[:NEXT]->(:${labelName} {id: $stepId})
130
+ }
131
+ WITH ${nodeName}
132
+ ${this.buildReturnStatement()}
133
+ `;
134
+ return this.neo4j.readOne(query);
135
+ }
136
+ /**
137
+ * Drops every manual canvas position of an automation's steps, so the canvas re-runs auto-layout.
138
+ */
139
+ async clearPositions(params) {
140
+ const { nodeName, labelName } = email_automation_step_meta_1.emailAutomationStepMeta;
141
+ const query = this.neo4j.initQuery();
142
+ query.queryParams = { ...query.queryParams, automationId: params.automationId };
143
+ query.query += `
144
+ MATCH (:${email_automation_meta_1.emailAutomationMeta.labelName} {id: $automationId})-[:HAS_STEP]->(${nodeName}:${labelName})
145
+ REMOVE ${nodeName}.positionX, ${nodeName}.positionY
146
+ SET ${nodeName}.updatedAt = datetime()
147
+ `;
148
+ await this.neo4j.writeOne(query);
149
+ }
150
+ };
151
+ exports.EmailAutomationStepRepository = EmailAutomationStepRepository;
152
+ exports.EmailAutomationStepRepository = EmailAutomationStepRepository = __decorate([
153
+ (0, common_1.Injectable)(),
154
+ __metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
155
+ ], EmailAutomationStepRepository);
156
+ //# sourceMappingURL=email-automation-step.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-automation-step.repository.js","sourceRoot":"","sources":["../../../../src/foundations/email-automation/repositories/email-automation-step.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,2FAAuF;AACvF,8EAA0E;AAC1E,uFAAmF;AACnF,mGAA6F;AAC7F,6EAAuG;AACvG,uFAAiF;AACjF,6EAAwE;AAGjE,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,wCAGlD;IAGC,YAAY,KAAmB,EAAE,eAAgC,EAAE,UAAsB;QACvF,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAHzB,eAAU,GAAG,qDAA6B,CAAC;IAI9D,CAAC;IAED;;;;OAIG;IACO,oBAAoB;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,oDAAuB,CAAC;QAC7C,MAAM,eAAe,GAAG,GAAG,QAAQ,aAAa,CAAC;QACjD,MAAM,SAAS,GAAG,GAAG,QAAQ,OAAO,CAAC;QAErC,OAAO;eACI,QAAQ,mBAAmB,eAAe,IAAI,2CAAmB,CAAC,SAAS;wBAClE,QAAQ,eAAe,SAAS,IAAI,oDAAuB,CAAC,SAAS;;eAE9E,QAAQ;0BACG,QAAQ,wBAAwB,gEAA6B,CAAC,SAAS;;;;eAIlF,SAAS;0BACE,SAAS,4BAA4B,gEAA6B,CAAC,SAAS;wCAC9D,SAAS;;eAElC,QAAQ;UACb,eAAe;UACf,SAAS;;UAET,SAAS;KACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAgC;QACrD,MAAM,EAAE,QAAQ,EAAE,GAAG,oDAAuB,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,qDAA6B,CAAC,KAAK,EAAE,CAAC,CAAC;QAExF,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAEhF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;;iBAEf,QAAQ,oBAAoB,2CAAmB,CAAC,SAAS;;aAE7D,QAAQ;iBACJ,QAAQ;QACjB,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAgC;QAC7C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,oDAAuB,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,qDAA6B,CAAC,KAAK,EAAE,CAAC,CAAC;QAExF,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAEhF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;;iBAEf,QAAQ,oBAAoB,2CAAmB,CAAC,SAAS;;;kBAGxD,SAAS,eAAe,QAAQ;;aAErC,QAAQ;iBACJ,QAAQ;;QAEjB,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAqD;QACjE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,oDAAuB,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;QAEnG,KAAK,CAAC,KAAK,IAAI;eACJ,QAAQ,IAAI,SAAS;wBACZ,QAAQ;;sBAEV,QAAQ;YAClB,QAAQ;KACf,CAAC;QAEF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,CAAC,KAAK,IAAI;aACR,QAAQ;eACN,QAAQ,SAAS,SAAS;eAC1B,QAAQ,eAAe,QAAQ;KACzC,CAAC;QACF,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAA0B;QAC3C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,oDAAuB,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,qDAA6B,CAAC,KAAK,EAAE,CAAC,CAAC;QAExF,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAEpE,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;;iBAEf,QAAQ,gBAAgB,SAAS;;aAErC,QAAQ;QACb,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,MAAgC;QACnD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,oDAAuB,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAEhF,KAAK,CAAC,KAAK,IAAI;gBACH,2CAAmB,CAAC,SAAS,uCAAuC,QAAQ,IAAI,SAAS;eAC1F,QAAQ,eAAe,QAAQ;YAClC,QAAQ;KACf,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA3JY,sEAA6B;wCAA7B,6BAA6B;IADzC,IAAA,mBAAU,GAAE;qCAOQ,4BAAY,EAAmB,kCAAe,EAAc,uBAAU;GAN9E,6BAA6B,CA2JzC"}
@@ -0,0 +1,36 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import { AbstractRepository } from "../../../core/neo4j/abstracts/abstract.repository";
3
+ import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
4
+ import { SecurityService } from "../../../core/security/services/security.service";
5
+ import { EmailAutomation, EmailAutomationDescriptor } from "../entities/email-automation";
6
+ export declare class EmailAutomationRepository extends AbstractRepository<EmailAutomation, typeof EmailAutomationDescriptor.relationships> {
7
+ protected readonly descriptor: import("../../..").EntityDescriptor<EmailAutomation, {
8
+ steps: {
9
+ model: import("../../..").DataMeta;
10
+ direction: "out";
11
+ relationship: string;
12
+ cardinality: "many";
13
+ required: false;
14
+ dtoKey: string;
15
+ };
16
+ }>;
17
+ constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
18
+ /**
19
+ * Adds the computed counts (stepCount, activeCount, completedCount,
20
+ * unsubscribedCount) to the default automation + steps return.
21
+ */
22
+ protected buildReturnStatement(): string;
23
+ /**
24
+ * Active automations a trigger enrols people into, oldest first.
25
+ */
26
+ findActiveByTrigger(params: {
27
+ trigger: string;
28
+ }): Promise<EmailAutomation[]>;
29
+ /**
30
+ * Active automations a trigger takes people out of.
31
+ */
32
+ findActiveByExitTrigger(params: {
33
+ exitTrigger: string;
34
+ }): Promise<EmailAutomation[]>;
35
+ }
36
+ //# sourceMappingURL=email-automation.repository.d.ts.map