feat: introducing new subscription handler interface and user defined/primitive types

This commit is contained in:
ankitsridhar16
2023-01-19 01:34:11 +05:30
parent f58d5d28cf
commit 9e25aa1f9f
3 changed files with 54 additions and 0 deletions

View File

@@ -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;
}
}
}

View File

@@ -0,0 +1,4 @@
import { UserEnvironment } from '../user-environment/user-environments.model';
import { User } from '../user/user.model';
export type ModuleTypes = UserEnvironment | User;

View File

@@ -0,0 +1 @@
export type PrimitiveTypes = number | string | boolean;