From 53dc40e8c7828675373e0cd595c1baba7efcf42a Mon Sep 17 00:00:00 2001 From: Mir Arif Hasan Date: Mon, 19 Dec 2022 18:12:49 +0600 Subject: [PATCH] feat: added mutation for update user settings --- packages/hoppscotch-backend/src/errors.ts | 6 ++++ .../user-settings/user-settings.resolver.ts | 19 +++++++++++ .../user-settings/user-settings.service.ts | 32 +++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/packages/hoppscotch-backend/src/errors.ts b/packages/hoppscotch-backend/src/errors.ts index 2e8641e50..0caed05e3 100644 --- a/packages/hoppscotch-backend/src/errors.ts +++ b/packages/hoppscotch-backend/src/errors.ts @@ -215,3 +215,9 @@ export const BUG_TEAM_ENV_GUARD_NO_REQUIRE_ROLES = */ export const BUG_TEAM_ENV_GUARD_NO_ENV_ID = 'bug/team_env/guard_no_env_id' as const; + +/** + * User settings update failed + * (UserSettingsService) + */ +export const USER_SETTINGS_UPDATE_FAILED = 'user_settings/update_failed' as const; \ No newline at end of file diff --git a/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts b/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts index a686a9b69..65e13489b 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts @@ -35,5 +35,24 @@ export class UserSettingsResolver { return userSettings.right; } + @Mutation(() => UserSettings, { + description: 'Update user settings for given user', + }) + @UseGuards(GqlAuthGuard) + async updateUserSettings( + @GqlUser() user: User, + @Args({ + name: 'properties', + description: 'JSON string of properties object', + }) + properties: string, + ) { + const updatedUserSettings = + await this.userSettingsService.updateUserSettings(user, properties); + + if (E.isLeft(updatedUserSettings)) throwErr(updatedUserSettings.left); + return updatedUserSettings.right; + } + /* Subscriptions */ } diff --git a/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts b/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts index f69eb20e8..e9dc0b0f7 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts @@ -5,6 +5,7 @@ import { User } from 'src/user/user.model'; import * as E from 'fp-ts/Either'; import { stringToJson } from 'src/utils'; import { UserSettings } from './user-settings.model'; +import { USER_SETTINGS_UPDATE_FAILED } from 'src/errors'; @Injectable() export class UserSettingsService { @@ -33,4 +34,35 @@ export class UserSettingsService { return E.right(userSettings); } + + async updateUserSettings(user: User, properties: string) { + const jsonProperties = stringToJson(properties); + if (E.isLeft(jsonProperties)) return E.left(jsonProperties.left); + + try { + const dbUpdatedUserSettings = await this.prisma.userSettings.update({ + where: { userUid: user.uid }, + data: { + properties: jsonProperties.right, + }, + }); + + const updatedUserSettings: UserSettings = { + id: dbUpdatedUserSettings.id, + userUid: dbUpdatedUserSettings.userUid, + properties, + updatedOn: dbUpdatedUserSettings.updatedOn, + }; + + // Publish subscription for environment creation + await this.pubsub.publish( + `user_settings/${user.uid}/updated`, + updatedUserSettings, + ); + + return E.right(updatedUserSettings); + } catch (e) { + return E.left(USER_SETTINGS_UPDATE_FAILED); + } + } }