diff --git a/packages/hoppscotch-backend/src/user-environment/user-environments.resolver.ts b/packages/hoppscotch-backend/src/user-environment/user-environments.resolver.ts index c73156600..17cda8902 100644 --- a/packages/hoppscotch-backend/src/user-environment/user-environments.resolver.ts +++ b/packages/hoppscotch-backend/src/user-environment/user-environments.resolver.ts @@ -61,11 +61,10 @@ export class UserEnvironmentsResolver { variables: string, ): Promise { const isGlobal = true; - const globalEnvName: string = null; const userEnvironment = await this.userEnvironmentsService.createUserEnvironment( user.uid, - globalEnvName, + null, variables, isGlobal, ); @@ -126,7 +125,7 @@ export class UserEnvironmentsResolver { } @Mutation(() => Number, { - description: 'Deletes users all personal environments', + description: 'Deletes all of users personal environments', }) @UseGuards(GqlAuthGuard) async deleteUserEnvironments(@GqlUser() user: User): Promise { @@ -159,15 +158,8 @@ export class UserEnvironmentsResolver { resolve: (value) => value, }) @UseGuards(GqlAuthGuard) - userEnvironmentCreated( - @Args({ - name: 'userUid', - description: 'Users uid', - type: () => ID, - }) - userUid: string, - ) { - return this.pubsub.asyncIterator(`user_environment/${userUid}/created`); + userEnvironmentCreated(@GqlUser() user: User) { + return this.pubsub.asyncIterator(`user_environment/${user.uid}/created`); } @Subscription(() => UserEnvironment, { @@ -201,4 +193,15 @@ export class UserEnvironmentsResolver { ) { return this.pubsub.asyncIterator(`user_environment/${id}/deleted`); } + + @Subscription(() => UserEnvironment, { + description: 'Listen for User Environment DeleteMany', + resolve: (value) => value, + }) + @UseGuards(GqlAuthGuard) + userEnvironmentDeleteMany(@GqlUser() user: User) { + return this.pubsub.asyncIterator( + `user_environment/${user.uid}/delete_many`, + ); + } } diff --git a/packages/hoppscotch-backend/src/user-environment/user-environments.service.spec.ts b/packages/hoppscotch-backend/src/user-environment/user-environments.service.spec.ts index f41287f1d..894872cde 100644 --- a/packages/hoppscotch-backend/src/user-environment/user-environments.service.spec.ts +++ b/packages/hoppscotch-backend/src/user-environment/user-environments.service.spec.ts @@ -10,6 +10,7 @@ import { } from '../errors'; import { PubSubService } from '../pubsub/pubsub.service'; import { SubscriptionHandler } from '../subscription-handler'; +import { SubscriptionType } from '../types/subscription-types'; const mockPrisma = mockDeep(); const mockPubSub = mockDeep(); @@ -23,13 +24,6 @@ const userEnvironmentsService = new UserEnvironmentsService( mockSubscriptionHandler, ); -enum SubscriptionType { - Created = 'created', - Updated = 'updated', - Deleted = 'deleted', - DeleteMany = 'delete_many', -} - const userPersonalEnvironments = [ { userUiD: 'abc123', @@ -344,7 +338,9 @@ describe('UserEnvironmentsService', () => { }); test('Should resolve left and not update a users environment if env doesnt exist ', async () => { - mockPrisma.userEnvironment.update.mockRejectedValueOnce({}); + mockPrisma.userEnvironment.update.mockRejectedValueOnce( + 'RejectOnNotFound', + ); return expect( await userEnvironmentsService.updateUserEnvironment( @@ -355,7 +351,7 @@ describe('UserEnvironmentsService', () => { ).toEqualLeft(USER_ENVIRONMENT_ENV_DOES_NOT_EXISTS); }); - test('Should resolve right, update a users personal environment and publish an updated subscription ', async () => { + test('Should update a users personal environment and publish an updated subscription ', async () => { mockPrisma.userEnvironment.update.mockResolvedValueOnce({ userUid: 'abc123', id: '123', @@ -385,7 +381,7 @@ describe('UserEnvironmentsService', () => { ); }); - test('Should resolve right, update a users global environment and publish an updated subscription ', async () => { + test('Should update a users global environment and publish an updated subscription ', async () => { mockPrisma.userEnvironment.update.mockResolvedValueOnce({ userUid: 'abc123', id: '123', diff --git a/packages/hoppscotch-backend/src/user-environment/user-environments.service.ts b/packages/hoppscotch-backend/src/user-environment/user-environments.service.ts index 7bf8c7ae1..290b414da 100644 --- a/packages/hoppscotch-backend/src/user-environment/user-environments.service.ts +++ b/packages/hoppscotch-backend/src/user-environment/user-environments.service.ts @@ -14,14 +14,8 @@ import { USER_ENVIRONMENT_INVALID_ENVIRONMENT_NAME, } from '../errors'; import { SubscriptionHandler } from '../subscription-handler'; - -// Contains constants for the subscription types we send to subscription handler -enum SubscriptionType { - Created = 'created', - Updated = 'updated', - Deleted = 'deleted', - DeleteMany = 'delete_many', -} +import { SubscriptionType } from '../types/subscription-types'; +import { stringToJson } from '../utils'; @Injectable() export class UserEnvironmentsService { @@ -106,11 +100,13 @@ export class UserEnvironmentsService { if (name === null && !isGlobal) return E.left(USER_ENVIRONMENT_INVALID_ENVIRONMENT_NAME); + const envVariables = stringToJson(variables); + if (E.isLeft(envVariables)) return E.left(envVariables.left); const createdEnvironment = await this.prisma.userEnvironment.create({ data: { userUid: uid, name: name, - variables: JSON.parse(variables), + variables: envVariables.right, isGlobal: isGlobal, }, }); @@ -139,12 +135,14 @@ export class UserEnvironmentsService { * @returns an Either of `UserEnvironment` or error */ async updateUserEnvironment(id: string, name: string, variables: string) { + const envVariables = stringToJson(variables); + if (E.isLeft(envVariables)) return E.left(envVariables.left); try { const updatedEnvironment = await this.prisma.userEnvironment.update({ where: { id: id }, data: { name: name, - variables: JSON.parse(variables), + variables: envVariables.right, }, });