@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.
- package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
- package/dist/bootstrap/app.module.factory.js +1 -0
- package/dist/bootstrap/app.module.factory.js.map +1 -1
- package/dist/bootstrap/bootstrap.options.d.ts +20 -0
- package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
- package/dist/core/email/services/email.service.d.ts +2 -0
- package/dist/core/email/services/email.service.d.ts.map +1 -1
- package/dist/core/email/services/email.service.js +18 -8
- package/dist/core/email/services/email.service.js.map +1 -1
- package/dist/core/email/templates/en/emailAutomation.hbs +24 -0
- package/dist/foundations/auth/controllers/auth.discord.controller.d.ts +1 -1
- package/dist/foundations/auth/controllers/auth.discord.controller.d.ts.map +1 -1
- package/dist/foundations/auth/controllers/auth.discord.controller.js +6 -3
- package/dist/foundations/auth/controllers/auth.discord.controller.js.map +1 -1
- package/dist/foundations/auth/controllers/auth.google.controller.d.ts +1 -1
- package/dist/foundations/auth/controllers/auth.google.controller.d.ts.map +1 -1
- package/dist/foundations/auth/controllers/auth.google.controller.js +6 -3
- package/dist/foundations/auth/controllers/auth.google.controller.js.map +1 -1
- package/dist/foundations/auth/dtos/auth.post.register.dto.d.ts +6 -0
- package/dist/foundations/auth/dtos/auth.post.register.dto.d.ts.map +1 -1
- package/dist/foundations/auth/dtos/auth.post.register.dto.js +36 -0
- package/dist/foundations/auth/dtos/auth.post.register.dto.js.map +1 -1
- package/dist/foundations/auth/events/auth.events.d.ts +7 -0
- package/dist/foundations/auth/events/auth.events.d.ts.map +1 -0
- package/dist/foundations/auth/events/auth.events.js +6 -0
- package/dist/foundations/auth/events/auth.events.js.map +1 -0
- package/dist/foundations/auth/index.d.ts +2 -0
- package/dist/foundations/auth/index.d.ts.map +1 -1
- package/dist/foundations/auth/index.js +3 -1
- package/dist/foundations/auth/index.js.map +1 -1
- package/dist/foundations/auth/services/auth.discord.service.d.ts +6 -2
- package/dist/foundations/auth/services/auth.discord.service.d.ts.map +1 -1
- package/dist/foundations/auth/services/auth.discord.service.js +29 -5
- package/dist/foundations/auth/services/auth.discord.service.js.map +1 -1
- package/dist/foundations/auth/services/auth.google.service.d.ts +6 -2
- package/dist/foundations/auth/services/auth.google.service.d.ts.map +1 -1
- package/dist/foundations/auth/services/auth.google.service.js +29 -5
- package/dist/foundations/auth/services/auth.google.service.js.map +1 -1
- package/dist/foundations/auth/services/auth.service.d.ts +15 -1
- package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
- package/dist/foundations/auth/services/auth.service.js +58 -10
- package/dist/foundations/auth/services/auth.service.js.map +1 -1
- package/dist/foundations/auth/services/pending-registration.service.d.ts +2 -0
- package/dist/foundations/auth/services/pending-registration.service.d.ts.map +1 -1
- package/dist/foundations/auth/services/pending-registration.service.js.map +1 -1
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.d.ts +22 -0
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.d.ts.map +1 -0
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.js +152 -0
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.js.map +1 -0
- package/dist/foundations/email-automation/controllers/email-automation.controller.d.ts +29 -0
- package/dist/foundations/email-automation/controllers/email-automation.controller.d.ts.map +1 -0
- package/dist/foundations/email-automation/controllers/email-automation.controller.js +183 -0
- package/dist/foundations/email-automation/controllers/email-automation.controller.js.map +1 -0
- package/dist/foundations/email-automation/controllers/email-automation.public.controller.d.ts +20 -0
- package/dist/foundations/email-automation/controllers/email-automation.public.controller.d.ts.map +1 -0
- package/dist/foundations/email-automation/controllers/email-automation.public.controller.js +63 -0
- package/dist/foundations/email-automation/controllers/email-automation.public.controller.js.map +1 -0
- package/dist/foundations/email-automation/cron/email-automation-sender.cron.d.ts +9 -0
- package/dist/foundations/email-automation/cron/email-automation-sender.cron.d.ts.map +1 -0
- package/dist/foundations/email-automation/cron/email-automation-sender.cron.js +44 -0
- package/dist/foundations/email-automation/cron/email-automation-sender.cron.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.dto.d.ts +8 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.dto.js +36 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.dto.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.d.ts +16 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.js +72 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.patch.dto.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.d.ts +21 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.js +88 -0
- package/dist/foundations/email-automation/dtos/email-automation-step.post.dto.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.d.ts +11 -0
- package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.js +47 -0
- package/dist/foundations/email-automation/dtos/email-automation-unsubscribe.dto.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation.dto.d.ts +8 -0
- package/dist/foundations/email-automation/dtos/email-automation.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation.dto.js +36 -0
- package/dist/foundations/email-automation/dtos/email-automation.dto.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation.patch.dto.d.ts +16 -0
- package/dist/foundations/email-automation/dtos/email-automation.patch.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation.patch.dto.js +72 -0
- package/dist/foundations/email-automation/dtos/email-automation.patch.dto.js.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation.post.dto.d.ts +16 -0
- package/dist/foundations/email-automation/dtos/email-automation.post.dto.d.ts.map +1 -0
- package/dist/foundations/email-automation/dtos/email-automation.post.dto.js +72 -0
- package/dist/foundations/email-automation/dtos/email-automation.post.dto.js.map +1 -0
- package/dist/foundations/email-automation/email-automation.module.d.ts +35 -0
- package/dist/foundations/email-automation/email-automation.module.d.ts.map +1 -0
- package/dist/foundations/email-automation/email-automation.module.js +122 -0
- package/dist/foundations/email-automation/email-automation.module.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.d.ts +55 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.js +74 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.d.ts +3 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.js +10 -0
- package/dist/foundations/email-automation/entities/email-automation-enrollment.meta.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-step.d.ts +32 -0
- package/dist/foundations/email-automation/entities/email-automation-step.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-step.js +55 -0
- package/dist/foundations/email-automation/entities/email-automation-step.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-step.meta.d.ts +3 -0
- package/dist/foundations/email-automation/entities/email-automation-step.meta.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-step.meta.js +10 -0
- package/dist/foundations/email-automation/entities/email-automation-step.meta.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.d.ts +11 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.js +15 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.meta.d.ts +6 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.meta.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.meta.js +13 -0
- package/dist/foundations/email-automation/entities/email-automation-trigger.meta.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation.d.ts +26 -0
- package/dist/foundations/email-automation/entities/email-automation.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation.js +54 -0
- package/dist/foundations/email-automation/entities/email-automation.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation.meta.d.ts +7 -0
- package/dist/foundations/email-automation/entities/email-automation.meta.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-automation.meta.js +14 -0
- package/dist/foundations/email-automation/entities/email-automation.meta.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-opt-out.d.ts +9 -0
- package/dist/foundations/email-automation/entities/email-opt-out.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-opt-out.js +17 -0
- package/dist/foundations/email-automation/entities/email-opt-out.js.map +1 -0
- package/dist/foundations/email-automation/entities/email-opt-out.meta.d.ts +3 -0
- package/dist/foundations/email-automation/entities/email-opt-out.meta.d.ts.map +1 -0
- package/dist/foundations/email-automation/entities/email-opt-out.meta.js +10 -0
- package/dist/foundations/email-automation/entities/email-opt-out.meta.js.map +1 -0
- package/dist/foundations/email-automation/index.d.ts +32 -0
- package/dist/foundations/email-automation/index.d.ts.map +1 -0
- package/dist/foundations/email-automation/index.js +56 -0
- package/dist/foundations/email-automation/index.js.map +1 -0
- package/dist/foundations/email-automation/interfaces/email-automation.config.interface.d.ts +49 -0
- package/dist/foundations/email-automation/interfaces/email-automation.config.interface.d.ts.map +1 -0
- package/dist/foundations/email-automation/interfaces/email-automation.config.interface.js +14 -0
- package/dist/foundations/email-automation/interfaces/email-automation.config.interface.js.map +1 -0
- package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.d.ts +150 -0
- package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.d.ts.map +1 -0
- package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.js +379 -0
- package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.js.map +1 -0
- package/dist/foundations/email-automation/repositories/email-automation-step.repository.d.ts +64 -0
- package/dist/foundations/email-automation/repositories/email-automation-step.repository.d.ts.map +1 -0
- package/dist/foundations/email-automation/repositories/email-automation-step.repository.js +156 -0
- package/dist/foundations/email-automation/repositories/email-automation-step.repository.js.map +1 -0
- package/dist/foundations/email-automation/repositories/email-automation.repository.d.ts +36 -0
- package/dist/foundations/email-automation/repositories/email-automation.repository.d.ts.map +1 -0
- package/dist/foundations/email-automation/repositories/email-automation.repository.js +93 -0
- package/dist/foundations/email-automation/repositories/email-automation.repository.js.map +1 -0
- package/dist/foundations/email-automation/repositories/email-opt-out.repository.d.ts +25 -0
- package/dist/foundations/email-automation/repositories/email-opt-out.repository.d.ts.map +1 -0
- package/dist/foundations/email-automation/repositories/email-opt-out.repository.js +69 -0
- package/dist/foundations/email-automation/repositories/email-opt-out.repository.js.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-renderer.service.d.ts +35 -0
- package/dist/foundations/email-automation/services/email-automation-renderer.service.d.ts.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-renderer.service.js +109 -0
- package/dist/foundations/email-automation/services/email-automation-renderer.service.js.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-sender.service.d.ts +31 -0
- package/dist/foundations/email-automation/services/email-automation-sender.service.d.ts.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-sender.service.js +129 -0
- package/dist/foundations/email-automation/services/email-automation-sender.service.js.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-step.service.d.ts +60 -0
- package/dist/foundations/email-automation/services/email-automation-step.service.d.ts.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-step.service.js +101 -0
- package/dist/foundations/email-automation/services/email-automation-step.service.js.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-trigger.service.d.ts +28 -0
- package/dist/foundations/email-automation/services/email-automation-trigger.service.d.ts.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-trigger.service.js +125 -0
- package/dist/foundations/email-automation/services/email-automation-trigger.service.js.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.d.ts +53 -0
- package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.d.ts.map +1 -0
- package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.js +67 -0
- package/dist/foundations/email-automation/services/email-automation-unsubscribe.service.js.map +1 -0
- package/dist/foundations/email-automation/services/email-automation.service.d.ts +53 -0
- package/dist/foundations/email-automation/services/email-automation.service.d.ts.map +1 -0
- package/dist/foundations/email-automation/services/email-automation.service.js +90 -0
- package/dist/foundations/email-automation/services/email-automation.service.js.map +1 -0
- package/dist/foundations/email-automation/triggers/built-in.triggers.d.ts +10 -0
- package/dist/foundations/email-automation/triggers/built-in.triggers.d.ts.map +1 -0
- package/dist/foundations/email-automation/triggers/built-in.triggers.js +50 -0
- package/dist/foundations/email-automation/triggers/built-in.triggers.js.map +1 -0
- package/dist/foundations/foundations.modules.d.ts +3 -0
- package/dist/foundations/foundations.modules.d.ts.map +1 -1
- package/dist/foundations/foundations.modules.js +7 -1
- package/dist/foundations/foundations.modules.js.map +1 -1
- package/dist/foundations/index.d.ts +1 -0
- package/dist/foundations/index.d.ts.map +1 -1
- package/dist/foundations/index.js +1 -0
- package/dist/foundations/index.js.map +1 -1
- package/dist/foundations/user/entities/user.d.ts +6 -0
- package/dist/foundations/user/entities/user.d.ts.map +1 -1
- package/dist/foundations/user/entities/user.js +7 -0
- package/dist/foundations/user/entities/user.js.map +1 -1
- package/dist/foundations/user/repositories/user.repository.d.ts +9 -0
- package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
- package/dist/foundations/user/repositories/user.repository.js +23 -0
- package/dist/foundations/user/repositories/user.repository.js.map +1 -1
- package/dist/foundations/waitlist/dtos/waitlist.post.dto.d.ts +6 -0
- package/dist/foundations/waitlist/dtos/waitlist.post.dto.d.ts.map +1 -1
- package/dist/foundations/waitlist/dtos/waitlist.post.dto.js +36 -0
- package/dist/foundations/waitlist/dtos/waitlist.post.dto.js.map +1 -1
- package/dist/foundations/waitlist/entities/waitlist.d.ts +6 -0
- package/dist/foundations/waitlist/entities/waitlist.d.ts.map +1 -1
- package/dist/foundations/waitlist/entities/waitlist.js +6 -0
- package/dist/foundations/waitlist/entities/waitlist.js.map +1 -1
- package/dist/foundations/waitlist/events/waitlist.events.d.ts +7 -0
- package/dist/foundations/waitlist/events/waitlist.events.d.ts.map +1 -0
- package/dist/foundations/waitlist/events/waitlist.events.js +6 -0
- package/dist/foundations/waitlist/events/waitlist.events.js.map +1 -0
- package/dist/foundations/waitlist/index.d.ts +4 -0
- package/dist/foundations/waitlist/index.d.ts.map +1 -1
- package/dist/foundations/waitlist/index.js +11 -1
- package/dist/foundations/waitlist/index.js.map +1 -1
- package/dist/foundations/waitlist/services/waitlist.service.d.ts +5 -2
- package/dist/foundations/waitlist/services/waitlist.service.d.ts.map +1 -1
- package/dist/foundations/waitlist/services/waitlist.service.js +33 -18
- package/dist/foundations/waitlist/services/waitlist.service.js.map +1 -1
- package/dist/foundations/waitlist/utils/signup-source.d.ts +24 -0
- package/dist/foundations/waitlist/utils/signup-source.d.ts.map +1 -0
- package/dist/foundations/waitlist/utils/signup-source.js +52 -0
- package/dist/foundations/waitlist/utils/signup-source.js.map +1 -0
- package/package.json +1 -1
package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.js
ADDED
|
@@ -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
|
package/dist/foundations/email-automation/repositories/email-automation-enrollment.repository.js.map
ADDED
|
@@ -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":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AAExC,2FAAuF;AACvF,8EAA0E;AAC1E,uFAAmF;AACnF,yFAIiD;AACjD,mGAA6F;AAC7F,uFAAiF;AACjF,6EAAwE;AAIjE,IAAM,mCAAmC,GAAzC,MAAM,mCAAoC,SAAQ,wCAGxD;IAGC,YAAY,KAAmB,EAAE,eAAgC,EAAE,UAAsB;QACvF,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAHzB,eAAU,GAAG,iEAAmC,CAAC;IAIpE,CAAC;IAED;;;;OAIG;IACO,oBAAoB;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,eAAe,GAAG,GAAG,QAAQ,aAAa,CAAC;QACjD,MAAM,gBAAgB,GAAG,GAAG,QAAQ,cAAc,CAAC;QAEnD,OAAO;eACI,QAAQ,yBAAyB,eAAe,IAAI,2CAAmB,CAAC,SAAS;wBACxE,QAAQ,kBAAkB,gBAAgB,IAAI,oDAAuB,CAAC,SAAS;;eAExF,QAAQ;0BACG,QAAQ,wBAAwB,oDAAuB,CAAC,SAAS;;;eAG5E,QAAQ;UACb,eAAe;UACf,gBAAgB;UAChB,gBAAgB;;KAErB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAQtB;QACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,gEAA6B,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK;YAC7B,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI;YACnC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,aAAa;YAC7C,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;YACzC,MAAM,EAAE,QAAkD;YAC1D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;YAC3C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;YAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC1C,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;eACJ,QAAQ,eAAe,2CAAmB,CAAC,SAAS;eACpD,QAAQ,SAAS,oDAAuB,CAAC,SAAS;gBACjD,QAAQ,IAAI,SAAS;;;;;;;;;;;;;;gBAcrB,QAAQ,oCAAoC,QAAQ;gBACpD,QAAQ,kBAAkB,QAAQ;KAC7C,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAAC,MAG9B;QACC,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,iEAAmC,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;SAClC,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;sBACV,QAAQ;;iBAEb,QAAQ,0BAA0B,2CAAmB,CAAC,SAAS;;aAEnE,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,iBAAiB,CAAC,MAAyB;QAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,iEAAmC,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YACjC,MAAM,EAAE,QAAkD;SAC3D,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;sBACV,QAAQ,wBAAwB,QAAQ;aACjD,QAAQ;QACb,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,8BAA8B,CAAC,MAGpC;QACC,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,iEAAmC,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,QAAkD;SAC3D,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;sBACV,QAAQ,wBAAwB,QAAQ;;iBAE7C,QAAQ,0BAA0B,2CAAmB,CAAC,SAAS;;aAEnE,QAAQ;QACb,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,MAAyB;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,iEAAmC,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAExE,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QAC3D,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,MAAoC;QAChD,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,iEAAmC,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,QAAkD;SAC3D,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;cAClB,QAAQ;YACV,QAAQ;;iBAEH,QAAQ,yBAAyB,2CAAmB,CAAC,QAAQ,IAAI,2CAAmB,CAAC,SAAS;gBAC/F,2CAAmB,CAAC,QAAQ;;aAE/B,QAAQ;iBACJ,QAAQ;;QAEjB,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAgD;QAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,iEAAmC,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAEtG,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;;iBAEpC,QAAQ,gBAAgB,oDAAuB,CAAC,SAAS;;aAE7D,QAAQ;QACb,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAA8D;QAC3E,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,gEAA6B,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;eACJ,QAAQ,IAAI,SAAS;eACrB,QAAQ,SAAS,oDAAuB,CAAC,SAAS;eAClD,QAAQ,uBAAuB,QAAQ;;YAE1C,QAAQ;YACR,QAAQ;YACR,QAAQ;KACf,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAsE;QAClF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,gEAA6B,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;SAC5C,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;eACJ,QAAQ,IAAI,SAAS;wBACZ,QAAQ;;sBAEV,QAAQ;eACf,QAAQ,SAAS,oDAAuB,CAAC,SAAS;gBACjD,QAAQ,kBAAkB,QAAQ;YACtC,QAAQ;YACR,QAAQ;KACf,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAIZ;QACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,gEAA6B,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;SAC5C,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;eACJ,QAAQ,IAAI,SAAS;wBACZ,QAAQ;;sBAEV,QAAQ;YAClB,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;KACf,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAiE;QACnF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,gEAA6B,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;SAC5C,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;eACJ,QAAQ,IAAI,SAAS;YACxB,QAAQ,wBAAwB,QAAQ;YACxC,QAAQ;YACR,QAAQ;YACR,QAAQ;KACf,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,MAAyE;QACzF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,gEAA6B,CAAC;QAC9D,MAAM,SAAS,GAAG,oDAAuB,CAAC,SAAS,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,QAAkD;YAChE,eAAe,EAAE,WAAqD;YACtE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;SAC5C,CAAC;QAEF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,IAAI;gBACL,SAAS,+CAA+C,QAAQ,IAAI,SAAS;eAC9E,QAAQ,SAAS,SAAS;;gBAEzB,QAAQ,kBAAkB,QAAQ;YACtC,QAAQ;KACf,CAAC;QACF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,IAAI;gBACL,SAAS,+CAA+C,QAAQ,IAAI,SAAS;;YAEjF,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;KACf,CAAC;QACF,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAItB;QACC,MAAM,EAAE,QAAQ,EAAE,GAAG,gEAA6B,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACjC,UAAU,EAAE,iEAAmC,CAAC,KAAK;YACrD,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,QAAQ,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7E,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;SAC9B,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,EAAE;;iBAEf,QAAQ,0BAA0B,2CAAmB,CAAC,SAAS;;QAExE,YAAY;aACP,QAAQ;iBACJ,QAAQ;;QAEjB,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AA/aY,kFAAmC;8CAAnC,mCAAmC;IAD/C,IAAA,mBAAU,GAAE;qCAOQ,4BAAY,EAAmB,kCAAe,EAAc,uBAAU;GAN9E,mCAAmC,CA+a/C"}
|
|
@@ -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
|
package/dist/foundations/email-automation/repositories/email-automation-step.repository.d.ts.map
ADDED
|
@@ -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
|
package/dist/foundations/email-automation/repositories/email-automation-step.repository.js.map
ADDED
|
@@ -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":"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"}
|
|
@@ -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
|