From 7286d3b94f147ee2146ada43a1f559b1a70c808a Mon Sep 17 00:00:00 2001 From: Akash K <57758277+amk-dev@users.noreply.github.com> Date: Thu, 30 Mar 2023 12:17:00 +0530 Subject: [PATCH] feat: add reqType to userHistoryDeletedMany subscription (#61) --- .../src/pubsub/topicsDefs.ts | 7 +++++-- .../src/user-history/user-history.model.ts | 12 +++++++++++ .../src/user-history/user-history.resolver.ts | 8 ++++---- .../user-history/user-history.service.spec.ts | 20 +++++++++++++++---- .../src/user-history/user-history.service.ts | 12 ++++++----- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/packages/hoppscotch-backend/src/pubsub/topicsDefs.ts b/packages/hoppscotch-backend/src/pubsub/topicsDefs.ts index bf34d415e..c4f316398 100644 --- a/packages/hoppscotch-backend/src/pubsub/topicsDefs.ts +++ b/packages/hoppscotch-backend/src/pubsub/topicsDefs.ts @@ -5,7 +5,10 @@ import { import { User } from 'src/user/user.model'; import { UserSettings } from 'src/user-settings/user-settings.model'; import { UserEnvironment } from '../user-environment/user-environments.model'; -import { UserHistory } from '../user-history/user-history.model'; +import { + UserHistory, + UserHistoryDeletedManyData, +} from '../user-history/user-history.model'; import { TeamMember } from 'src/team/team.model'; import { TeamEnvironment } from 'src/team-environments/team-environments.model'; import { @@ -58,7 +61,7 @@ export type TopicDef = { [topic: `team_coll/${string}/${'coll_removed'}`]: string; [topic: `team_coll/${string}/${'coll_moved'}`]: TeamCollection; [topic: `team_coll/${string}/${'coll_order_updated'}`]: CollectionReorderData; - [topic: `user_history/${string}/deleted_many`]: number; + [topic: `user_history/${string}/deleted_many`]: UserHistoryDeletedManyData; [ topic: `team_req/${string}/${'req_created' | 'req_updated' | 'req_moved'}` ]: TeamRequest; diff --git a/packages/hoppscotch-backend/src/user-history/user-history.model.ts b/packages/hoppscotch-backend/src/user-history/user-history.model.ts index 49f8620ce..c384391bc 100644 --- a/packages/hoppscotch-backend/src/user-history/user-history.model.ts +++ b/packages/hoppscotch-backend/src/user-history/user-history.model.ts @@ -40,6 +40,18 @@ export class UserHistory { executedOn: Date; } +@ObjectType() +export class UserHistoryDeletedManyData { + @Field(() => Number, { + description: 'Number of user histories deleted', + }) + count: number; + @Field(() => ReqType, { + description: 'Type of the request in the history', + }) + reqType: ReqType; +} + registerEnumType(ReqType, { name: 'ReqType', }); diff --git a/packages/hoppscotch-backend/src/user-history/user-history.resolver.ts b/packages/hoppscotch-backend/src/user-history/user-history.resolver.ts index 19c384c16..a07b26f83 100644 --- a/packages/hoppscotch-backend/src/user-history/user-history.resolver.ts +++ b/packages/hoppscotch-backend/src/user-history/user-history.resolver.ts @@ -1,7 +1,7 @@ import { Args, ID, Mutation, Resolver, Subscription } from '@nestjs/graphql'; import { UserHistoryService } from './user-history.service'; import { PubSubService } from '../pubsub/pubsub.service'; -import { UserHistory } from './user-history.model'; +import { UserHistory, UserHistoryDeletedManyData } from './user-history.model'; import { ReqType } from 'src/types/RequestTypes'; import { UseGuards } from '@nestjs/common'; import { GqlAuthGuard } from '../guards/gql-auth.guard'; @@ -93,7 +93,7 @@ export class UserHistoryResolver { return deletedHistory.right; } - @Mutation(() => Number, { + @Mutation(() => UserHistoryDeletedManyData, { description: 'Deletes all REST/GQL history for a user based on Request type', }) @@ -106,7 +106,7 @@ export class UserHistoryResolver { type: () => ReqType, }) reqType: ReqType, - ): Promise { + ): Promise { const deletedHistory = await this.userHistoryService.deleteAllUserHistory( user.uid, reqType, @@ -147,7 +147,7 @@ export class UserHistoryResolver { return this.pubsub.asyncIterator(`user_history/${user.uid}/deleted`); } - @Subscription(() => Number, { + @Subscription(() => UserHistoryDeletedManyData, { description: 'Listen for User History deleted many', resolve: (value) => value, }) diff --git a/packages/hoppscotch-backend/src/user-history/user-history.service.spec.ts b/packages/hoppscotch-backend/src/user-history/user-history.service.spec.ts index 4eec4e975..2d6b7b0cf 100644 --- a/packages/hoppscotch-backend/src/user-history/user-history.service.spec.ts +++ b/packages/hoppscotch-backend/src/user-history/user-history.service.spec.ts @@ -428,7 +428,10 @@ describe('UserHistoryService', () => { return expect( await userHistoryService.deleteAllUserHistory('abc', 'REST'), - ).toEqualRight(2); + ).toEqualRight({ + count: 2, + reqType: ReqType.REST, + }); }); test('Should resolve right and delete all user GQL history for a request type', async () => { mockPrisma.userHistory.deleteMany.mockResolvedValueOnce({ @@ -437,7 +440,10 @@ describe('UserHistoryService', () => { return expect( await userHistoryService.deleteAllUserHistory('abc', 'GQL'), - ).toEqualRight(2); + ).toEqualRight({ + count: 2, + reqType: ReqType.GQL, + }); }); test('Should resolve left and error when ReqType is invalid', async () => { return expect( @@ -452,7 +458,10 @@ describe('UserHistoryService', () => { await userHistoryService.deleteAllUserHistory('abc', 'REST'); return expect(mockPubSub.publish).toHaveBeenCalledWith( `user_history/abc/deleted_many`, - 2, + { + count: 2, + reqType: ReqType.REST, + }, ); }); test('Should delete all user GQL history for a request type and publish deleted many subscription', async () => { @@ -463,7 +472,10 @@ describe('UserHistoryService', () => { await userHistoryService.deleteAllUserHistory('abc', 'GQL'); return expect(mockPubSub.publish).toHaveBeenCalledWith( `user_history/abc/deleted_many`, - 2, + { + count: 2, + reqType: ReqType.GQL, + }, ); }); }); diff --git a/packages/hoppscotch-backend/src/user-history/user-history.service.ts b/packages/hoppscotch-backend/src/user-history/user-history.service.ts index 66e0b8ba3..ba643c4a6 100644 --- a/packages/hoppscotch-backend/src/user-history/user-history.service.ts +++ b/packages/hoppscotch-backend/src/user-history/user-history.service.ts @@ -178,12 +178,14 @@ export class UserHistoryService { }, }); + const deletionInfo = { + count: deletedCount.count, + reqType: requestType.right, + }; + // Publish multiple user history deleted subscription - await this.pubsub.publish( - `user_history/${uid}/deleted_many`, - deletedCount.count, - ); - return E.right(deletedCount.count); + await this.pubsub.publish(`user_history/${uid}/deleted_many`, deletionInfo); + return E.right(deletionInfo); } /**