Skip to content

Commit eea4f3c

Browse files
committed
feat: publish workflow trigger lifecycles
1 parent bd70831 commit eea4f3c

File tree

5 files changed

+118
-2
lines changed

5 files changed

+118
-2
lines changed

apps/api/src/workflow-triggers/services/workflow-trigger.service.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { BaseService } from '@app/common/base/base.service'
2+
import { RedisPubSubService } from '@app/common/cache/redis-pubsub.service'
23
import { isEmptyObj } from '@app/common/utils/object.utils'
34
import { IntegrationDefinitionFactory } from '@app/definitions'
45
import { generateSchemaFromObject } from '@app/definitions/schema/utils/jsonSchemaUtils'
@@ -44,6 +45,7 @@ export class WorkflowTriggerService extends BaseService<WorkflowTrigger> {
4445
@Inject(forwardRef(() => IntegrationDefinitionFactory))
4546
protected integrationDefinitionFactory: IntegrationDefinitionFactory,
4647
protected operationRunnerService: OperationRunnerService,
48+
protected redisPubSubService: RedisPubSubService,
4749
) {
4850
super(model)
4951
}
@@ -159,6 +161,15 @@ export class WorkflowTriggerService extends BaseService<WorkflowTrigger> {
159161

160162
await this.workflowService.updateUsedIntegrations(workflow)
161163

164+
this.redisPubSubService.publish(
165+
'workflowTriggerCreated',
166+
JSON.stringify({
167+
id: createdEntity.id,
168+
integrationKey: integration.key,
169+
integrationTriggerKey: integrationTrigger.key,
170+
}),
171+
)
172+
162173
return createdEntity
163174
}
164175

@@ -308,6 +319,15 @@ export class WorkflowTriggerService extends BaseService<WorkflowTrigger> {
308319
)
309320
}
310321

322+
this.redisPubSubService.publish(
323+
'workflowTriggerUpdated',
324+
JSON.stringify({
325+
id,
326+
integrationKey: integration.key,
327+
integrationTriggerKey: integrationTrigger.key,
328+
}),
329+
)
330+
311331
return updatedEntity
312332
}
313333

@@ -360,6 +380,15 @@ export class WorkflowTriggerService extends BaseService<WorkflowTrigger> {
360380
)
361381
await this.workflowService.updateUsedIntegrations(workflow)
362382

383+
this.redisPubSubService.publish(
384+
'workflowTriggerDeleted',
385+
JSON.stringify({
386+
id,
387+
integrationKey: integration.key,
388+
integrationTriggerKey: integrationTrigger.key,
389+
}),
390+
)
391+
363392
return deletedEntity
364393
}
365394

apps/api/src/workflow-triggers/workflow-triggers.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { CommonModule } from '@app/common'
12
import { NestjsQueryTypegooseModule } from '@app/common/NestjsQueryTypegooseModule'
23
import { forwardRef, Module } from '@nestjs/common'
34
import { NestjsQueryGraphQLModule } from '@ptc-org/nestjs-query-graphql'
@@ -31,6 +32,7 @@ import { WorkflowUsedIdService } from './services/workflow-used-id.service'
3132
],
3233
dtos: [{ DTOClass: WorkflowTrigger }, { DTOClass: WorkflowUsedId }],
3334
}),
35+
CommonModule,
3436
AuthModule,
3537
UsersModule,
3638
IntegrationsModule,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Injectable, OnModuleDestroy } from '@nestjs/common'
2+
import { ConfigService } from '@nestjs/config'
3+
import Redis, { Redis as RedisType } from 'ioredis'
4+
5+
@Injectable()
6+
export class RedisPubSubService implements OnModuleDestroy {
7+
private readonly client: RedisType
8+
9+
constructor(private configService: ConfigService) {
10+
const redisUrl = this.configService.get<string>('REDIS_URL')
11+
if (!redisUrl) {
12+
throw new Error('Redis URL not defined')
13+
}
14+
15+
this.client = new Redis(redisUrl)
16+
}
17+
18+
onModuleDestroy(): void {
19+
this.client.quit()
20+
}
21+
22+
publish(channel: string, message: string): void {
23+
this.client.publish(channel, message)
24+
}
25+
26+
subscribe(channel: string) {
27+
return this.client.subscribe(channel)
28+
}
29+
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"graphql-relay": "0.10.0",
8686
"graphql-subscriptions": "2.0.0",
8787
"graphql-type-json": "^0.3.2",
88+
"ioredis": "^5.3.2",
8889
"js-yaml": "^3.14.0",
8990
"json-schema-generator": "^2.0.6",
9091
"json-schema-merge-allof": "^0.7.0",
@@ -143,6 +144,7 @@
143144
"@types/express": "^4.17.3",
144145
"@types/express-session": "^1.17.5",
145146
"@types/graphql-type-json": "^0.3.2",
147+
"@types/ioredis": "^5.0.0",
146148
"@types/jest": "26.0.14",
147149
"@types/js-yaml": "^3.12.5",
148150
"@types/json-schema": "^7.0.5",

yarn.lock

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,6 +2422,11 @@
24222422
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
24232423
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
24242424

2425+
"@ioredis/commands@^1.1.1":
2426+
version "1.2.0"
2427+
resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11"
2428+
integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==
2429+
24252430
"@istanbuljs/load-nyc-config@^1.0.0":
24262431
version "1.1.0"
24272432
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -4333,6 +4338,13 @@
43334338
dependencies:
43344339
graphql "^14.5.3"
43354340

4341+
"@types/ioredis@^5.0.0":
4342+
version "5.0.0"
4343+
resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-5.0.0.tgz#c1ea7e2f3e2c5a942a27cfee6f62ddcfb23fb3e7"
4344+
integrity sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==
4345+
dependencies:
4346+
ioredis "*"
4347+
43364348
"@types/is-stream@^1.1.0":
43374349
version "1.1.0"
43384350
resolved "https://registry.yarnpkg.com/@types/is-stream/-/is-stream-1.1.0.tgz#b84d7bb207a210f2af9bed431dc0fbe9c4143be1"
@@ -6613,7 +6625,7 @@ clone@^1.0.2:
66136625
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
66146626
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
66156627

6616-
6628+
[email protected], cluster-key-slot@^1.1.0:
66176629
version "1.1.2"
66186630
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac"
66196631
integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==
@@ -7237,7 +7249,7 @@ [email protected]:
72377249
resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b"
72387250
integrity sha512-a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ==
72397251

7240-
denque@^2.0.1:
7252+
denque@^2.0.1, denque@^2.1.0:
72417253
version "2.1.0"
72427254
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
72437255
integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
@@ -9812,6 +9824,21 @@ io-ts@^2.0.0:
98129824
resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.17.tgz#19531c9d49abcebc935d85d282e1db95adb01901"
98139825
integrity sha512-RkQY06h6rRyADVEI46OCAUYTP2p18Vdtz9Movi19Mmj7SJ1NhN/yGyW7CxlcBVxh95WKg2YSbTmcUPqqeLuhXw==
98149826

9827+
ioredis@*, ioredis@^5.3.2:
9828+
version "5.3.2"
9829+
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7"
9830+
integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==
9831+
dependencies:
9832+
"@ioredis/commands" "^1.1.1"
9833+
cluster-key-slot "^1.1.0"
9834+
debug "^4.3.4"
9835+
denque "^2.1.0"
9836+
lodash.defaults "^4.2.0"
9837+
lodash.isarguments "^3.1.0"
9838+
redis-errors "^1.2.0"
9839+
redis-parser "^3.0.0"
9840+
standard-as-callback "^2.1.0"
9841+
98159842
ip@^2.0.0:
98169843
version "2.0.0"
98179844
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
@@ -10999,6 +11026,11 @@ lodash.clonedeep@^4.5.0:
1099911026
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
1100011027
integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
1100111028

11029+
lodash.defaults@^4.2.0:
11030+
version "4.2.0"
11031+
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
11032+
integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==
11033+
1100211034
lodash.defaultsdeep@^4.6.1:
1100311035
version "4.6.1"
1100411036
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
@@ -11014,6 +11046,11 @@ lodash.get@^4.4.2:
1101411046
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
1101511047
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
1101611048

11049+
lodash.isarguments@^3.1.0:
11050+
version "3.1.0"
11051+
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
11052+
integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==
11053+
1101711054
1101811055
version "4.4.0"
1101911056
resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
@@ -13152,6 +13189,18 @@ recursive-readdir@^2.2.2:
1315213189
dependencies:
1315313190
minimatch "3.0.4"
1315413191

13192+
redis-errors@^1.0.0, redis-errors@^1.2.0:
13193+
version "1.2.0"
13194+
resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
13195+
integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==
13196+
13197+
redis-parser@^3.0.0:
13198+
version "3.0.0"
13199+
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
13200+
integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==
13201+
dependencies:
13202+
redis-errors "^1.0.0"
13203+
1315513204
[email protected], redis@^4.3.1:
1315613205
version "4.6.5"
1315713206
resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.5.tgz#f32fbde44429e96f562bb0c9b1db0143ab8cfa4f"
@@ -14092,6 +14141,11 @@ stacktrace-parser@^0.1.10:
1409214141
dependencies:
1409314142
type-fest "^0.7.1"
1409414143

14144+
standard-as-callback@^2.1.0:
14145+
version "2.1.0"
14146+
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45"
14147+
integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==
14148+
1409514149
state-toggle@^1.0.0:
1409614150
version "1.0.3"
1409714151
resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"

0 commit comments

Comments
 (0)