From 9e25aa1f9f329b2e293bc7879e32f7fb7003549a Mon Sep 17 00:00:00 2001 From: ankitsridhar16 Date: Thu, 19 Jan 2023 01:34:11 +0530 Subject: [PATCH] feat: introducing new subscription handler interface and user defined/primitive types --- .../src/subscription-handler.ts | 49 +++++++++++++++++++ .../src/types/module-types.ts | 4 ++ .../src/types/primitive-types.ts | 1 + 3 files changed, 54 insertions(+) create mode 100644 packages/hoppscotch-backend/src/subscription-handler.ts create mode 100644 packages/hoppscotch-backend/src/types/module-types.ts create mode 100644 packages/hoppscotch-backend/src/types/primitive-types.ts diff --git a/packages/hoppscotch-backend/src/subscription-handler.ts b/packages/hoppscotch-backend/src/subscription-handler.ts new file mode 100644 index 000000000..f07e62c89 --- /dev/null +++ b/packages/hoppscotch-backend/src/subscription-handler.ts @@ -0,0 +1,49 @@ +import { Injectable } from '@nestjs/common'; +import { PubSubService } from './pubsub/pubsub.service'; +import { PrimitiveTypes } from './types/primitive-types'; +import { ModuleTypes } from './types/module-types'; + +// Custom generic type to indicate the type of module +type ModuleType = PrimitiveTypes | ModuleTypes; + +// Contains constants for the subscription types we send to pubsub service +enum SubscriptionType { + Created = 'created', + Updated = 'updated', + Deleted = 'deleted', + DeleteMany = 'delete_many', +} + +@Injectable() +export class SubscriptionHandler { + constructor(private readonly pubsub: PubSubService) {} + + /** + * Publishes a subscription using the pubsub module + * @param topic a string containing the module name, a uid and the type of subscription + * @param moduleType type of the module model being called + * @returns a promise of type void + */ + async publish( + topic: string, + subscriptionType: SubscriptionType, + moduleType: ModuleType, + ) { + switch (subscriptionType) { + case SubscriptionType.Created: + await this.pubsub.publish(`${topic}/created`, moduleType); + break; + case SubscriptionType.Updated: + await this.pubsub.publish(`${topic}/updated`, moduleType); + break; + case SubscriptionType.Deleted: + await this.pubsub.publish(`${topic}/deleted`, moduleType); + break; + case SubscriptionType.DeleteMany: + await this.pubsub.publish(`${topic}/delete_many`, moduleType); + break; + default: + break; + } + } +} diff --git a/packages/hoppscotch-backend/src/types/module-types.ts b/packages/hoppscotch-backend/src/types/module-types.ts new file mode 100644 index 000000000..356fcc816 --- /dev/null +++ b/packages/hoppscotch-backend/src/types/module-types.ts @@ -0,0 +1,4 @@ +import { UserEnvironment } from '../user-environment/user-environments.model'; +import { User } from '../user/user.model'; + +export type ModuleTypes = UserEnvironment | User; diff --git a/packages/hoppscotch-backend/src/types/primitive-types.ts b/packages/hoppscotch-backend/src/types/primitive-types.ts new file mode 100644 index 000000000..11918cf33 --- /dev/null +++ b/packages/hoppscotch-backend/src/types/primitive-types.ts @@ -0,0 +1 @@ +export type PrimitiveTypes = number | string | boolean;