@or-sdk/idw 1.1.0-beta.1301.0 → 1.1.0-beta.1304.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/cjs/idw.js CHANGED
@@ -94,9 +94,7 @@ var IDW = (function (_super) {
94
94
  return [3, 4];
95
95
  case 2:
96
96
  e_1 = _a.sent();
97
- return [4, this.graphApi.createGraph({
98
- name: constants_1.GRAPH_NAME,
99
- })];
97
+ return [4, this.graphApi.createGraph({ name: constants_1.GRAPH_NAME })];
100
98
  case 3:
101
99
  _a.sent();
102
100
  return [3, 4];
@@ -106,32 +104,53 @@ var IDW = (function (_super) {
106
104
  });
107
105
  };
108
106
  IDW.prototype.createOrUpdateFlow = function (flow) {
107
+ var _a, _b;
109
108
  return __awaiter(this, void 0, void 0, function () {
110
- var userId;
111
- return __generator(this, function (_a) {
112
- switch (_a.label) {
109
+ var id, userId, channel, skills;
110
+ return __generator(this, function (_c) {
111
+ switch (_c.label) {
113
112
  case 0:
114
- if (flow.id === undefined) {
113
+ id = flow.id;
114
+ if (id === undefined) {
115
115
  throw new Error('Only flows with id can be added to the IDW graph');
116
116
  }
117
117
  if (!flow.isDeleted) return [3, 2];
118
- return [4, this.deleteFlow(flow.id)];
119
- case 1: return [2, _a.sent()];
118
+ return [4, this.deleteFlow(id)];
119
+ case 1: return [2, _c.sent()];
120
120
  case 2: return [4, this.users.getCurrentUser()];
121
121
  case 3:
122
- userId = (_a.sent()).userId;
122
+ userId = (_c.sent()).userId;
123
123
  return [4, this.graphQuery("\n MERGE (flow:FLOW { id: $id })\n ON MATCH\n SET flow.createdAt = $createdAt,\n flow.createdBy = $userId,\n flow.description = $description,\n flow.groupId = $groupId,\n flow.name = $name,\n flow.updatedAt = $updatedAt,\n flow.updatedBy = $userId\n ON CREATE\n SET flow.createdAt = $createdAt,\n flow.createdBy = $userId,\n flow.description = $description,\n flow.groupId = $groupId,\n flow.isActive = false,\n flow.name = $name,\n flow.updatedAt = $updatedAt,\n flow.updatedBy = $userId\n RETURN flow\n ", {
124
124
  createdAt: flow.dateCreated,
125
125
  description: flow.data.description,
126
126
  groupId: flow.botId,
127
- id: flow.id,
127
+ id: id,
128
128
  name: flow.data.label,
129
129
  updatedAt: flow.dateModified,
130
130
  userId: userId,
131
131
  })];
132
132
  case 4:
133
- _a.sent();
134
- return [2];
133
+ _c.sent();
134
+ return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id })\n OPTIONAL MATCH (flow)-[channelRelations:IMPLEMENTS { isActive: false }]->(:CHANNEL)\n OPTIONAL MATCH (flow)-[skillRelations:IMPLEMENTS { isActive: false }]->(:SKILL)\n DELETE channelRelations, skillRelations\n ", { id: id })];
135
+ case 5:
136
+ _c.sent();
137
+ channel = (_a = flow.data.meta.idw) === null || _a === void 0 ? void 0 : _a.channel;
138
+ skills = (_b = flow.data.meta.idw) === null || _b === void 0 ? void 0 : _b.skills;
139
+ if (!(channel !== undefined && channel.length !== 0)) return [3, 7];
140
+ return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id }),\n (channel:CHANNEL { id: $channel })\n MERGE (flow)-[relationship:IMPLEMENTS]->(channel)\n ON CREATE\n SET relationship.isActive = false\n ", {
141
+ channel: channel,
142
+ id: id,
143
+ })];
144
+ case 6:
145
+ _c.sent();
146
+ _c.label = 7;
147
+ case 7:
148
+ if (!(skills === null || skills === void 0 ? void 0 : skills.length)) return [3, 9];
149
+ return [4, this.createSkillRelation(skills, id)];
150
+ case 8:
151
+ _c.sent();
152
+ _c.label = 9;
153
+ case 9: return [2];
135
154
  }
136
155
  });
137
156
  });
@@ -149,19 +168,48 @@ var IDW = (function (_super) {
149
168
  });
150
169
  };
151
170
  IDW.prototype.activateFlow = function (flow) {
171
+ var _a, _b;
152
172
  return __awaiter(this, void 0, void 0, function () {
153
- var id;
154
- return __generator(this, function (_a) {
155
- switch (_a.label) {
173
+ var id, channel, skills;
174
+ return __generator(this, function (_c) {
175
+ switch (_c.label) {
156
176
  case 0:
157
177
  id = flow.id;
158
178
  if (id === undefined) {
159
179
  throw new Error('Only flows with id can be added to the IDW graph');
160
180
  }
161
- return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id })\n SET flow.isActive = true,\n flow.activatedAt = $activatedAt\n RETURN flow\n ", {
181
+ return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id })\n OPTIONAL MATCH (flow)-[channelRelations:IMPLEMENTS]->(:CHANNEL)\n OPTIONAL MATCH (flow)-[skillRelations:IMPLEMENTS]->(:SKILL)\n DELETE channelRelations, skillRelations\n SET flow.activatedAt = $activatedAt,\n flow.isActive = true\n ", {
162
182
  activatedAt: Date.now(),
163
183
  id: id,
164
184
  })];
185
+ case 1:
186
+ _c.sent();
187
+ channel = (_a = flow.data.meta.idw) === null || _a === void 0 ? void 0 : _a.channel;
188
+ skills = (_b = flow.data.meta.idw) === null || _b === void 0 ? void 0 : _b.skills;
189
+ if (!(channel !== undefined && channel.length !== 0)) return [3, 3];
190
+ return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id }),\n (channel:CHANNEL { id: $channel })\n MERGE (flow)-[relationship:IMPLEMENTS]->(channel)\n SET relationship.isActive = true\n ", {
191
+ channel: channel,
192
+ id: id,
193
+ })];
194
+ case 2:
195
+ _c.sent();
196
+ _c.label = 3;
197
+ case 3:
198
+ if (!(skills === null || skills === void 0 ? void 0 : skills.length)) return [3, 5];
199
+ return [4, this.createSkillRelation(skills, id)];
200
+ case 4:
201
+ _c.sent();
202
+ _c.label = 5;
203
+ case 5: return [2];
204
+ }
205
+ });
206
+ });
207
+ };
208
+ IDW.prototype.deactivateFlow = function (id) {
209
+ return __awaiter(this, void 0, void 0, function () {
210
+ return __generator(this, function (_a) {
211
+ switch (_a.label) {
212
+ case 0: return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id })\n OPTIONAL MATCH (flow)-[relationships:IMPLEMENTS]->(:CHANNEL)\n SET flow.isActive = false,\n relationships.isActive = false\n REMOVE flow.activatedAt\n RETURN flow\n ", { id: id })];
165
213
  case 1:
166
214
  _a.sent();
167
215
  return [2];
@@ -169,11 +217,16 @@ var IDW = (function (_super) {
169
217
  });
170
218
  });
171
219
  };
172
- IDW.prototype.deactivateFlow = function (id) {
220
+ IDW.prototype.createSkillRelation = function (skillIds, flowId) {
173
221
  return __awaiter(this, void 0, void 0, function () {
222
+ var preparedIds;
174
223
  return __generator(this, function (_a) {
175
224
  switch (_a.label) {
176
- case 0: return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id } )\n SET flow.isActive = false\n REMOVE flow.activatedAt\n RETURN flow\n ", { id: id })];
225
+ case 0:
226
+ preparedIds = skillIds.map(function (id) { return "'".concat(id, "'"); });
227
+ return [4, this.graphQuery("\n MATCH (flow:FLOW { id: $id }), (skill:SKILL)\n WHERE skill.id in [".concat(preparedIds, "]\n MERGE (flow)-[:IMPLEMENTS]->(skill)\n return skill, flow\n "), {
228
+ id: flowId,
229
+ })];
177
230
  case 1:
178
231
  _a.sent();
179
232
  return [2];
@@ -181,34 +234,40 @@ var IDW = (function (_super) {
181
234
  });
182
235
  });
183
236
  };
237
+ IDW.prototype.getSkillsList = function () {
238
+ return __awaiter(this, void 0, void 0, function () {
239
+ var data;
240
+ return __generator(this, function (_a) {
241
+ switch (_a.label) {
242
+ case 0: return [4, this.graphQuery("\n MATCH (skills:SKILL)\n RETURN skills\n ", {})];
243
+ case 1:
244
+ data = _a.sent();
245
+ return [2, (data !== null && data !== void 0 ? data : []).map(function (row) { return row.properties; })];
246
+ }
247
+ });
248
+ });
249
+ };
184
250
  IDW.prototype.graphQuery = function (query, params) {
185
251
  return __awaiter(this, void 0, void 0, function () {
186
- var e_2, e_3;
252
+ var e_2;
187
253
  return __generator(this, function (_a) {
188
254
  switch (_a.label) {
189
- case 0:
190
- _a.trys.push([0, 2, , 3]);
191
- return [4, this.checkOrCreateDb()];
255
+ case 0: return [4, this.checkOrCreateDb()];
192
256
  case 1:
193
257
  _a.sent();
194
- return [3, 3];
258
+ _a.label = 2;
195
259
  case 2:
196
- e_2 = _a.sent();
197
- console.warn(e_2);
198
- return [3, 3];
199
- case 3:
200
- _a.trys.push([3, 5, , 6]);
260
+ _a.trys.push([2, 4, , 5]);
201
261
  return [4, this.graphApi.query({
202
262
  graph: constants_1.GRAPH_NAME,
203
263
  params: params,
204
264
  query: query,
205
265
  })];
206
- case 4: return [2, _a.sent()];
207
- case 5:
208
- e_3 = _a.sent();
209
- console.warn(e_3);
210
- return [3, 6];
211
- case 6: return [2];
266
+ case 3: return [2, _a.sent()];
267
+ case 4:
268
+ e_2 = _a.sent();
269
+ return [3, 5];
270
+ case 5: return [2];
212
271
  }
213
272
  });
214
273
  });
@@ -1 +1 @@
1
- {"version":3,"file":"idw.js","sourceRoot":"","sources":["../../src/idw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idw.js","sourceRoot":"","sources":["../../src/idw.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAoC;AAEpC,uCAAuC;AACvC,uCAAsC;AACtC,yCAAsD;AAUtD;IAAyB,uBAAI;IAe3B,aAAY,MAAiB;QAA7B,iBA4BC;QA1BG,IAAA,SAAS,GAKP,MAAM,UALC,EACT,YAAY,GAIV,MAAM,aAJI,EACZ,QAAQ,GAGN,MAAM,SAHA,EACR,SAAS,GAEP,MAAM,UAFC,EACT,KAAK,GACH,MAAM,MADH,CACI;gBAEX,kBAAM;YACJ,SAAS,WAAA;YACT,YAAY,cAAA;YACZ,UAAU,EAAE,uBAAW;YACvB,KAAK,OAAA;SACN,CAAC;QAEF,KAAI,CAAC,QAAQ,GAAG,IAAI,cAAM,CAAC;YACzB,SAAS,WAAA;YACT,YAAY,cAAA;YACZ,QAAQ,UAAA;YACR,KAAK,OAAA;SACN,CAAC,CAAC;QACH,KAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC;YACrB,SAAS,WAAA;YACT,KAAK,OAAA;YACL,YAAY,cAAA;YACZ,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;;IACL,CAAC;IAEK,6BAAe,GAArB;;;;;;;wBAEI,WAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,sBAAU,CAAC,EAAA;;wBAA5C,SAA4C,CAAC;;;;wBAE7C,WAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,sBAAU,EAAE,CAAC,EAAA;;wBAArD,SAAqD,CAAC;;;;;;KAEzD;IAEK,gCAAkB,GAAxB,UAAyB,IAAU;;;;;;;wBAC3B,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;wBACnB,IAAI,EAAE,KAAK,SAAS,EAAE;4BACpB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;yBACrE;6BAEG,IAAI,CAAC,SAAS,EAAd,cAAc;wBACT,WAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;4BAAhC,WAAO,SAAyB,EAAC;4BAGhB,WAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAA;;wBAA5C,MAAM,GAAK,CAAA,SAAiC,CAAA,OAAtC;wBAEd,WAAM,IAAI,CAAC,UAAU,CAAC,+qBAoBrB,EAAE;gCACD,SAAS,EAAE,IAAI,CAAC,WAAW;gCAC3B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;gCAClC,OAAO,EAAE,IAAI,CAAC,KAAK;gCACnB,EAAE,IAAA;gCACF,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;gCACrB,SAAS,EAAE,IAAI,CAAC,YAAY;gCAC5B,MAAM,QAAA;6BACP,CAAC,EAAA;;wBA5BF,SA4BE,CAAC;wBAEH,WAAM,IAAI,CAAC,UAAU,CAAC,8QAKrB,EAAE,EAAE,EAAE,IAAA,EAAE,CAAC,EAAA;;wBALV,SAKU,CAAC;wBAEL,OAAO,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,OAAO,CAAC;wBACtC,MAAM,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,MAAM,CAAC;6BACtC,CAAA,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAA,EAA7C,cAA6C;wBAC/C,WAAM,IAAI,CAAC,UAAU,CAAC,+NAMrB,EAAE;gCACD,OAAO,SAAA;gCACP,EAAE,IAAA;6BACH,CAAC,EAAA;;wBATF,SASE,CAAC;;;6BAGD,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAd,cAAc;wBAChB,WAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAA;;wBAA1C,SAA0C,CAAC;;;;;;KAE9C;IAEK,wBAAU,GAAhB,UAAiB,EAAU;;;;4BACzB,WAAM,IAAI,CAAC,UAAU,CAAC,uEAGrB,EAAE,EAAE,EAAE,IAAA,EAAE,CAAC,EAAA;;wBAHV,SAGU,CAAC;;;;;KACZ;IAEK,0BAAY,GAAlB,UAAmB,IAAU;;;;;;;wBACrB,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;wBACnB,IAAI,EAAE,KAAK,SAAS,EAAE;4BACpB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;yBACrE;wBAED,WAAM,IAAI,CAAC,UAAU,CAAC,kTAOrB,EAAE;gCACD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;gCACvB,EAAE,IAAA;6BACH,CAAC,EAAA;;wBAVF,SAUE,CAAC;wBAEG,OAAO,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,OAAO,CAAC;wBACtC,MAAM,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,MAAM,CAAC;6BACtC,CAAA,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAA,EAA7C,cAA6C;wBAC/C,WAAM,IAAI,CAAC,UAAU,CAAC,yMAKrB,EAAE;gCACD,OAAO,SAAA;gCACP,EAAE,IAAA;6BACH,CAAC,EAAA;;wBARF,SAQE,CAAC;;;6BAGD,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAd,cAAc;wBAChB,WAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAA;;wBAA1C,SAA0C,CAAC;;;;;;KAE9C;IAEK,4BAAc,GAApB,UAAqB,EAAU;;;;4BAC7B,WAAM,IAAI,CAAC,UAAU,CAAC,+OAOrB,EAAE,EAAE,EAAE,IAAA,EAAE,CAAC,EAAA;;wBAPV,SAOU,CAAC;;;;;KACZ;IAGa,iCAAmB,GAAjC,UAAkC,QAAkB,EAAE,MAAc;;;;;;wBAC5D,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,WAAI,EAAE,MAAG,EAAT,CAAS,CAAC,CAAC;wBAClD,WAAM,IAAI,CAAC,UAAU,CAAC,6FAEG,WAAW,uFAGjC,EAAE;gCACH,EAAE,EAAE,MAAM;6BACX,CAAC,EAAA;;wBAPF,SAOE,CAAC;;;;;KACJ;IAEK,2BAAa,GAAnB;;;;;4BACe,WAAM,IAAI,CAAC,UAAU,CAAoC,yDAGrE,EAAE,EAAE,CAAC,EAAA;;wBAHA,IAAI,GAAG,SAGP;wBACN,WAAO,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,UAAU,EAAd,CAAc,CAAC,EAAC;;;;KAChD;IAEa,wBAAU,GAAxB,UAA4B,KAAa,EAAE,MAAyD;;;;;4BAElG,WAAM,IAAI,CAAC,eAAe,EAAE,EAAA;;wBAA5B,SAA4B,CAAC;;;;wBAGpB,WAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAI;gCAClC,KAAK,EAAE,sBAAU;gCACjB,MAAM,QAAA;gCACN,KAAK,OAAA;6BACN,CAAC,EAAA;4BAJF,WAAO,SAIL,EAAC;;;;;;;;KAIN;IACH,UAAC;AAAD,CAAC,AApND,CAAyB,WAAI,GAoN5B;AApNY,kBAAG"}
package/dist/esm/idw.js CHANGED
@@ -39,19 +39,19 @@ export class IDW extends Base {
39
39
  yield this.graphApi.getGraphInfo(GRAPH_NAME);
40
40
  }
41
41
  catch (e) {
42
- yield this.graphApi.createGraph({
43
- name: GRAPH_NAME,
44
- });
42
+ yield this.graphApi.createGraph({ name: GRAPH_NAME });
45
43
  }
46
44
  });
47
45
  }
48
46
  createOrUpdateFlow(flow) {
47
+ var _a, _b;
49
48
  return __awaiter(this, void 0, void 0, function* () {
50
- if (flow.id === undefined) {
49
+ const id = flow.id;
50
+ if (id === undefined) {
51
51
  throw new Error('Only flows with id can be added to the IDW graph');
52
52
  }
53
53
  if (flow.isDeleted) {
54
- return yield this.deleteFlow(flow.id);
54
+ return yield this.deleteFlow(id);
55
55
  }
56
56
  const { userId } = yield this.users.getCurrentUser();
57
57
  yield this.graphQuery(`
@@ -78,11 +78,34 @@ export class IDW extends Base {
78
78
  createdAt: flow.dateCreated,
79
79
  description: flow.data.description,
80
80
  groupId: flow.botId,
81
- id: flow.id,
81
+ id,
82
82
  name: flow.data.label,
83
83
  updatedAt: flow.dateModified,
84
84
  userId,
85
85
  });
86
+ yield this.graphQuery(`
87
+ MATCH (flow:FLOW { id: $id })
88
+ OPTIONAL MATCH (flow)-[channelRelations:IMPLEMENTS { isActive: false }]->(:CHANNEL)
89
+ OPTIONAL MATCH (flow)-[skillRelations:IMPLEMENTS { isActive: false }]->(:SKILL)
90
+ DELETE channelRelations, skillRelations
91
+ `, { id });
92
+ const channel = (_a = flow.data.meta.idw) === null || _a === void 0 ? void 0 : _a.channel;
93
+ const skills = (_b = flow.data.meta.idw) === null || _b === void 0 ? void 0 : _b.skills;
94
+ if (channel !== undefined && channel.length !== 0) {
95
+ yield this.graphQuery(`
96
+ MATCH (flow:FLOW { id: $id }),
97
+ (channel:CHANNEL { id: $channel })
98
+ MERGE (flow)-[relationship:IMPLEMENTS]->(channel)
99
+ ON CREATE
100
+ SET relationship.isActive = false
101
+ `, {
102
+ channel,
103
+ id,
104
+ });
105
+ }
106
+ if (skills === null || skills === void 0 ? void 0 : skills.length) {
107
+ yield this.createSkillRelation(skills, id);
108
+ }
86
109
  });
87
110
  }
88
111
  deleteFlow(id) {
@@ -94,6 +117,7 @@ export class IDW extends Base {
94
117
  });
95
118
  }
96
119
  activateFlow(flow) {
120
+ var _a, _b;
97
121
  return __awaiter(this, void 0, void 0, function* () {
98
122
  const id = flow.id;
99
123
  if (id === undefined) {
@@ -101,33 +125,70 @@ export class IDW extends Base {
101
125
  }
102
126
  yield this.graphQuery(`
103
127
  MATCH (flow:FLOW { id: $id })
104
- SET flow.isActive = true,
105
- flow.activatedAt = $activatedAt
106
- RETURN flow
128
+ OPTIONAL MATCH (flow)-[channelRelations:IMPLEMENTS]->(:CHANNEL)
129
+ OPTIONAL MATCH (flow)-[skillRelations:IMPLEMENTS]->(:SKILL)
130
+ DELETE channelRelations, skillRelations
131
+ SET flow.activatedAt = $activatedAt,
132
+ flow.isActive = true
107
133
  `, {
108
134
  activatedAt: Date.now(),
109
135
  id,
110
136
  });
137
+ const channel = (_a = flow.data.meta.idw) === null || _a === void 0 ? void 0 : _a.channel;
138
+ const skills = (_b = flow.data.meta.idw) === null || _b === void 0 ? void 0 : _b.skills;
139
+ if (channel !== undefined && channel.length !== 0) {
140
+ yield this.graphQuery(`
141
+ MATCH (flow:FLOW { id: $id }),
142
+ (channel:CHANNEL { id: $channel })
143
+ MERGE (flow)-[relationship:IMPLEMENTS]->(channel)
144
+ SET relationship.isActive = true
145
+ `, {
146
+ channel,
147
+ id,
148
+ });
149
+ }
150
+ if (skills === null || skills === void 0 ? void 0 : skills.length) {
151
+ yield this.createSkillRelation(skills, id);
152
+ }
111
153
  });
112
154
  }
113
155
  deactivateFlow(id) {
114
156
  return __awaiter(this, void 0, void 0, function* () {
115
157
  yield this.graphQuery(`
116
- MATCH (flow:FLOW { id: $id } )
117
- SET flow.isActive = false
158
+ MATCH (flow:FLOW { id: $id })
159
+ OPTIONAL MATCH (flow)-[relationships:IMPLEMENTS]->(:CHANNEL)
160
+ SET flow.isActive = false,
161
+ relationships.isActive = false
118
162
  REMOVE flow.activatedAt
119
163
  RETURN flow
120
164
  `, { id });
121
165
  });
122
166
  }
167
+ createSkillRelation(skillIds, flowId) {
168
+ return __awaiter(this, void 0, void 0, function* () {
169
+ const preparedIds = skillIds.map(id => `'${id}'`);
170
+ yield this.graphQuery(`
171
+ MATCH (flow:FLOW { id: $id }), (skill:SKILL)
172
+ WHERE skill.id in [${preparedIds}]
173
+ MERGE (flow)-[:IMPLEMENTS]->(skill)
174
+ return skill, flow
175
+ `, {
176
+ id: flowId,
177
+ });
178
+ });
179
+ }
180
+ getSkillsList() {
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ const data = yield this.graphQuery(`
183
+ MATCH (skills:SKILL)
184
+ RETURN skills
185
+ `, {});
186
+ return (data !== null && data !== void 0 ? data : []).map(row => row.properties);
187
+ });
188
+ }
123
189
  graphQuery(query, params) {
124
190
  return __awaiter(this, void 0, void 0, function* () {
125
- try {
126
- yield this.checkOrCreateDb();
127
- }
128
- catch (e) {
129
- console.warn(e);
130
- }
191
+ yield this.checkOrCreateDb();
131
192
  try {
132
193
  return yield this.graphApi.query({
133
194
  graph: GRAPH_NAME,
@@ -136,7 +197,6 @@ export class IDW extends Base {
136
197
  });
137
198
  }
138
199
  catch (e) {
139
- console.warn(e);
140
200
  }
141
201
  });
142
202
  }
@@ -1 +1 @@
1
- {"version":3,"file":"idw.js","sourceRoot":"","sources":["../../src/idw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idw.js","sourceRoot":"","sources":["../../src/idw.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Base } from '@or-sdk/base';
2
2
  import { Flow } from '@or-sdk/deployer';
3
- import { IDWConfig } from './types';
3
+ import { IDWConfig, SimpleNode } from './types';
4
4
  export declare class IDW extends Base {
5
5
  private readonly graphApi;
6
6
  private readonly users;
@@ -10,6 +10,8 @@ export declare class IDW extends Base {
10
10
  deleteFlow(id: string): Promise<void>;
11
11
  activateFlow(flow: Flow): Promise<void>;
12
12
  deactivateFlow(id: string): Promise<void>;
13
+ private createSkillRelation;
14
+ getSkillsList(): Promise<SimpleNode[]>;
13
15
  private graphQuery;
14
16
  }
15
17
  //# sourceMappingURL=idw.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"idw.d.ts","sourceRoot":"","sources":["../../src/idw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AASpC,qBAAa,GAAI,SAAQ,IAAI;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAalB,MAAM,EAAE,SAAS;IA8BvB,eAAe;IAUf,kBAAkB,CAAC,IAAI,EAAE,IAAI;IAqG7B,UAAU,CAAC,EAAE,EAAE,MAAM;IAOrB,YAAY,CAAC,IAAI,EAAE,IAAI;IA2BvB,cAAc,CAAC,EAAE,EAAE,MAAM;YASjB,UAAU;CAoBzB"}
1
+ {"version":3,"file":"idw.d.ts","sourceRoot":"","sources":["../../src/idw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIxC,OAAO,EAAyB,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AASvE,qBAAa,GAAI,SAAQ,IAAI;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAalB,MAAM,EAAE,SAAS;IA8BvB,eAAe;IAQf,kBAAkB,CAAC,IAAI,EAAE,IAAI;IAqE7B,UAAU,CAAC,EAAE,EAAE,MAAM;IAOrB,YAAY,CAAC,IAAI,EAAE,IAAI;IAqCvB,cAAc,CAAC,EAAE,EAAE,MAAM;YAYjB,mBAAmB;IAY3B,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAQ9B,UAAU;CAczB"}
@@ -6,4 +6,15 @@ export type IDWConfig = {
6
6
  sdkApiUrl?: string;
7
7
  token: Token;
8
8
  };
9
+ export interface SimpleNode {
10
+ id: string;
11
+ name: string;
12
+ icon?: string;
13
+ description?: string;
14
+ }
15
+ export interface GraphEntityProperties<T> {
16
+ id: number;
17
+ labels: string[];
18
+ properties: T;
19
+ }
9
20
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG;IAItB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG;IAItB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAGF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC,CAAC;CACf"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0-beta.1301.0",
2
+ "version": "1.1.0-beta.1304.0",
3
3
  "name": "@or-sdk/idw",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@or-sdk/base": "^0.28.1",
28
- "@or-sdk/deployer": "^1.1.2-beta.1301.0",
28
+ "@or-sdk/deployer": "^1.2.0-beta.1304.0",
29
29
  "@or-sdk/graph": "^1.3.1",
30
30
  "@or-sdk/users": "^0.30.0"
31
31
  }
package/src/idw.ts CHANGED
@@ -3,7 +3,7 @@ import { Flow } from '@or-sdk/deployer';
3
3
  import { Graphs } from '@or-sdk/graph';
4
4
  import { Users } from '@or-sdk/users';
5
5
  import { GRAPH_NAME, SERVICE_KEY } from './constants';
6
- import { IDWConfig } from './types';
6
+ import { GraphEntityProperties, IDWConfig, SimpleNode } from './types';
7
7
 
8
8
  /**
9
9
  * OneReach IDW service client
@@ -61,19 +61,18 @@ export class IDW extends Base {
61
61
  try {
62
62
  await this.graphApi.getGraphInfo(GRAPH_NAME);
63
63
  } catch (e) {
64
- await this.graphApi.createGraph({
65
- name: GRAPH_NAME,
66
- });
64
+ await this.graphApi.createGraph({ name: GRAPH_NAME });
67
65
  }
68
66
  }
69
67
 
70
68
  async createOrUpdateFlow(flow: Flow) {
71
- if (flow.id === undefined) {
69
+ const id = flow.id;
70
+ if (id === undefined) {
72
71
  throw new Error('Only flows with id can be added to the IDW graph');
73
72
  }
74
73
 
75
74
  if (flow.isDeleted) {
76
- return await this.deleteFlow(flow.id);
75
+ return await this.deleteFlow(id);
77
76
  }
78
77
 
79
78
  const { userId } = await this.users.getCurrentUser();
@@ -98,75 +97,42 @@ export class IDW extends Base {
98
97
  flow.updatedAt = $updatedAt,
99
98
  flow.updatedBy = $userId
100
99
  RETURN flow
101
- `,
102
- {
100
+ `, {
103
101
  createdAt: flow.dateCreated,
104
102
  description: flow.data.description,
105
103
  groupId: flow.botId,
106
- id: flow.id,
104
+ id,
107
105
  name: flow.data.label,
108
106
  updatedAt: flow.dateModified,
109
107
  userId,
108
+ });
109
+
110
+ await this.graphQuery(`
111
+ MATCH (flow:FLOW { id: $id })
112
+ OPTIONAL MATCH (flow)-[channelRelations:IMPLEMENTS { isActive: false }]->(:CHANNEL)
113
+ OPTIONAL MATCH (flow)-[skillRelations:IMPLEMENTS { isActive: false }]->(:SKILL)
114
+ DELETE channelRelations, skillRelations
115
+ `, { id });
116
+
117
+ const channel = flow.data.meta.idw?.channel;
118
+ const skills = flow.data.meta.idw?.skills;
119
+ if (channel !== undefined && channel.length !== 0) {
120
+ await this.graphQuery(`
121
+ MATCH (flow:FLOW { id: $id }),
122
+ (channel:CHANNEL { id: $channel })
123
+ MERGE (flow)-[relationship:IMPLEMENTS]->(channel)
124
+ ON CREATE
125
+ SET relationship.isActive = false
126
+ `, {
127
+ channel,
128
+ id,
129
+ });
110
130
  }
111
- );
112
-
113
- // const channel = flow.data.meta.idw?.channel;
114
- // if (channel !== undefined) {
115
- // const _channel = await this.getChannel(channel);
116
- // if (channel !== undefined && _.isEmpty(_channel)) return;
117
- // // TODO: ON MATCH DELETE [:IMPLEMENTS] relationship with channel node's { id != $channel }
118
- // await this.deleteRelationship(flow.id, channel);
119
- // // TODO: create :IMPLEMENTS relationship with channel node { id: $channel }
120
- // await this.createRelationship(flow.id, channel);
121
- // } else {
122
- // // TODO: ON MATCH DELETE [:IMPLEMENTS] relationship with channel nodes
123
- // await this.deleteAllRelationship(flow.id);
124
- // }
125
- }
126
131
 
127
- // async getChannel(channel: string) {
128
- // return await this.graphQuery(`
129
- // MATCH (channel: CHANNEL {id: $channel})
130
- // RETURN channel`,
131
- // { channel });
132
- // }
133
-
134
- // async getActivatedFlow(channel: string) {
135
- // return await this.graphQuery(`
136
- // MATCH (flow:FLOW { isActive: true })-[:IMPLEMENTS]-(:CHANNEL { channel: $channel })
137
- // RETURN flow`,
138
- // { channel });
139
- // }
140
-
141
- // async deleteRelationship(id: string, channel = '') {
142
- // await this.graphQuery(`
143
- // MATCH (:FLOW {id: $id})-[r:IMPLEMENTS]->(:CHANNEL {id: $channel})
144
- // DELETE r
145
- // `, {
146
- // id,
147
- // channel,
148
- // });
149
- // }
150
-
151
- // async deleteAllRelationship(id: string, channel = '') {
152
- // await this.graphQuery(`
153
- // MATCH (:FLOW {id: $id})-[r:IMPLEMENTS]->(:CHANNEL)
154
- // DELETE r
155
- // `, {
156
- // id,
157
- // channel,
158
- // });
159
- // }
160
-
161
- // async createRelationship(id: string, channel: string) {
162
- // await this.graphQuery(`
163
- // MATCH (f:FLOW {id: $id}), (c:CHANNEL {id: $channel})
164
- // MERGE (f)-[:IMPLEMENTS]->(c)
165
- // `, {
166
- // id,
167
- // channel,
168
- // });
169
- // }
132
+ if (skills?.length) {
133
+ await this.createSkillRelation(skills, id);
134
+ }
135
+ }
170
136
 
171
137
  async deleteFlow(id: string) {
172
138
  await this.graphQuery(`
@@ -181,53 +147,80 @@ export class IDW extends Base {
181
147
  throw new Error('Only flows with id can be added to the IDW graph');
182
148
  }
183
149
 
184
- // const channel = flow.data.meta?.idw?.channel;
185
- // if (channel != undefined) {
186
- // // TODO: only throw if a (:FLOW { isActive: true })-[:IMPLEMENTS]-(:CHANNEL { channel: $channel })
187
- // const activatedFlow = await this.getActivatedFlow(channel);
188
- // if (activatedFlow && activatedFlow.length > 0) {
189
- // throw new Error(`Cannot activate second flow for channel ${channel}`);
190
- // }
191
- // }
192
-
193
150
  await this.graphQuery(`
194
151
  MATCH (flow:FLOW { id: $id })
195
- SET flow.isActive = true,
196
- flow.activatedAt = $activatedAt
197
- RETURN flow
152
+ OPTIONAL MATCH (flow)-[channelRelations:IMPLEMENTS]->(:CHANNEL)
153
+ OPTIONAL MATCH (flow)-[skillRelations:IMPLEMENTS]->(:SKILL)
154
+ DELETE channelRelations, skillRelations
155
+ SET flow.activatedAt = $activatedAt,
156
+ flow.isActive = true
198
157
  `, {
199
158
  activatedAt: Date.now(),
200
159
  id,
201
160
  });
202
- }
203
161
 
162
+ const channel = flow.data.meta.idw?.channel;
163
+ const skills = flow.data.meta.idw?.skills;
164
+ if (channel !== undefined && channel.length !== 0) {
165
+ await this.graphQuery(`
166
+ MATCH (flow:FLOW { id: $id }),
167
+ (channel:CHANNEL { id: $channel })
168
+ MERGE (flow)-[relationship:IMPLEMENTS]->(channel)
169
+ SET relationship.isActive = true
170
+ `, {
171
+ channel,
172
+ id,
173
+ });
174
+ }
175
+
176
+ if (skills?.length) {
177
+ await this.createSkillRelation(skills, id);
178
+ }
179
+ }
204
180
 
205
181
  async deactivateFlow(id: string) {
206
182
  await this.graphQuery(`
207
- MATCH (flow:FLOW { id: $id } )
208
- SET flow.isActive = false
183
+ MATCH (flow:FLOW { id: $id })
184
+ OPTIONAL MATCH (flow)-[relationships:IMPLEMENTS]->(:CHANNEL)
185
+ SET flow.isActive = false,
186
+ relationships.isActive = false
209
187
  REMOVE flow.activatedAt
210
188
  RETURN flow
211
189
  `, { id });
212
190
  }
213
191
 
214
- private async graphQuery(query: string, params?: Record<string, null | number | string | boolean>) {
215
- //create graph if not exists
216
- try {
217
- await this.checkOrCreateDb();
218
- } catch (e) {
219
- console.warn(e);
220
- // TODO: handle errors 🤔
221
- }
192
+
193
+ private async createSkillRelation(skillIds: string[], flowId: string) {
194
+ const preparedIds = skillIds.map(id => `'${id}'`);
195
+ await this.graphQuery(`
196
+ MATCH (flow:FLOW { id: $id }), (skill:SKILL)
197
+ WHERE skill.id in [${preparedIds}]
198
+ MERGE (flow)-[:IMPLEMENTS]->(skill)
199
+ return skill, flow
200
+ `, {
201
+ id: flowId,
202
+ });
203
+ }
204
+
205
+ async getSkillsList(): Promise<SimpleNode[]> {
206
+ const data = await this.graphQuery<GraphEntityProperties<SimpleNode>>(`
207
+ MATCH (skills:SKILL)
208
+ RETURN skills
209
+ `, {});
210
+ return (data ?? []).map(row => row.properties);
211
+ }
212
+
213
+ private async graphQuery<T>(query: string, params?: Record<string, null | number | string | boolean>) {
214
+ // if 'idw' graph doesn't exist - create it
215
+ await this.checkOrCreateDb();
222
216
 
223
217
  try {
224
- return await this.graphApi.query({
218
+ return await this.graphApi.query<T>({
225
219
  graph: GRAPH_NAME,
226
220
  params,
227
221
  query,
228
222
  });
229
223
  } catch (e) {
230
- console.warn(e);
231
224
  // TODO: handle errors 🤔
232
225
  }
233
226
  }
package/src/types.ts CHANGED
@@ -26,3 +26,17 @@ export type IDWConfig = {
26
26
  */
27
27
  token: Token;
28
28
  };
29
+
30
+
31
+ export interface SimpleNode {
32
+ id: string;
33
+ name: string;
34
+ icon?: string;
35
+ description?: string;
36
+ }
37
+
38
+ export interface GraphEntityProperties<T> {
39
+ id: number;
40
+ labels: string[];
41
+ properties: T;
42
+ }