From b31e54b3e5ed57e6eb5ac0b78df7aa79e88be38c Mon Sep 17 00:00:00 2001 From: Mir Arif Hasan Date: Fri, 23 Dec 2022 13:13:21 +0600 Subject: [PATCH] feat: user-settings schema update and relative service file modified --- .../hoppscotch-backend/prisma/schema.prisma | 20 +++++++------- packages/hoppscotch-backend/src/errors.ts | 7 +++++ .../src/user-settings/user-settings.model.ts | 2 +- .../user-settings/user-settings.resolver.ts | 20 +++++++------- .../user-settings/user-settings.service.ts | 26 +++++++++---------- 5 files changed, 40 insertions(+), 35 deletions(-) diff --git a/packages/hoppscotch-backend/prisma/schema.prisma b/packages/hoppscotch-backend/prisma/schema.prisma index 650affa80..b7774c5dc 100644 --- a/packages/hoppscotch-backend/prisma/schema.prisma +++ b/packages/hoppscotch-backend/prisma/schema.prisma @@ -79,19 +79,19 @@ model TeamEnvironment { } model User { - uid String @id @default(cuid()) - displayName String? - email String? - photoURL String? - settings UserSettings? + uid String @id @default(cuid()) + displayName String? + email String? + photoURL String? + settings UserSettings? } model UserSettings { - id String @id @default(uuid()) - userUid String @unique - user User @relation(fields: [userUid], references: [uid], onDelete: Cascade) - properties Json - updatedOn DateTime @updatedAt + id String @id @default(cuid()) + userUid String @unique + user User @relation(fields: [userUid], references: [uid], onDelete: Cascade) + settings Json + updatedOn DateTime @updatedAt @db.Timestamptz(3) } enum TeamMemberRole { diff --git a/packages/hoppscotch-backend/src/errors.ts b/packages/hoppscotch-backend/src/errors.ts index 31cd009b0..8e4e2d447 100644 --- a/packages/hoppscotch-backend/src/errors.ts +++ b/packages/hoppscotch-backend/src/errors.ts @@ -167,6 +167,13 @@ export const TEAM_ENVIRONMENT_NOT_TEAM_MEMBER = */ export const USER_SETTINGS_NOT_FOUND = 'user_settings/not_found' as const; + +/** + * User setting not found for a user + * (UserSettingsService) + */ +export const USER_SETTINGS_EXIST = 'user_settings/exist' as const; + /** * User setting invalid (null) properties * (UserSettingsService) diff --git a/packages/hoppscotch-backend/src/user-settings/user-settings.model.ts b/packages/hoppscotch-backend/src/user-settings/user-settings.model.ts index 090803f8b..9fabd971f 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.model.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.model.ts @@ -15,7 +15,7 @@ export class UserSettings { @Field({ description: 'Stringified JSON settings object', }) - properties: string; // JSON string of the properties object (format:[{ key: "background", value: "system" }, ...] ) which will be received from the client + userSettings: string; // JSON string of the userSettings object (format:[{ key: "background", value: "system" }, ...] ) which will be received from the client @Field({ description: 'Last updated on', 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 d3b5de9d5..5794bc667 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts @@ -25,18 +25,16 @@ export class UserSettingsResolver { async createUserSettings( @GqlUser() user: User, @Args({ - name: 'properties', + name: 'userSettings', description: 'Stringified JSON settings object', }) - properties: string, + userSettings: string, ) { - const userSettings = await this.userSettingsService.createUserSettings( - user, - properties, - ); + const createdUserSettings = + await this.userSettingsService.createUserSettings(user, userSettings); - if (E.isLeft(userSettings)) throwErr(userSettings.left); - return userSettings.right; + if (E.isLeft(createdUserSettings)) throwErr(createdUserSettings.left); + return createdUserSettings.right; } @Mutation(() => UserSettings, { @@ -46,13 +44,13 @@ export class UserSettingsResolver { async updateUserSettings( @GqlUser() user: User, @Args({ - name: 'properties', + name: 'userSettings', description: 'Stringified JSON settings object', }) - properties: string, + userSettings: string, ) { const updatedUserSettings = - await this.userSettingsService.updateUserSettings(user, properties); + await this.userSettingsService.updateUserSettings(user, userSettings); if (E.isLeft(updatedUserSettings)) throwErr(updatedUserSettings.left); return updatedUserSettings.right; 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 a91f51653..86ae9dabc 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts @@ -6,7 +6,7 @@ import * as E from 'fp-ts/Either'; import { stringToJson } from 'src/utils'; import { UserSettings } from './user-settings.model'; import { - USER_NOT_FOUND, + USER_SETTINGS_EXIST, USER_SETTINGS_INVALID_PROPERTIES, USER_SETTINGS_NOT_FOUND, } from 'src/errors'; @@ -31,7 +31,7 @@ export class UserSettingsService { const settings: UserSettings = { ...userSettings, - properties: JSON.stringify(userSettings.properties), + userSettings: JSON.stringify(userSettings.settings), }; return E.right(settings); @@ -46,28 +46,28 @@ export class UserSettingsService { * @param properties User setting properties * @returns an Either of `UserSettings` or error */ - async createUserSettings(user: User, properties: string) { - if (!properties) return E.left(USER_SETTINGS_INVALID_PROPERTIES); + async createUserSettings(user: User, settingsString: string) { + if (!settingsString) return E.left(USER_SETTINGS_INVALID_PROPERTIES); - const settingsObject = stringToJson(properties); + const settingsObject = stringToJson(settingsString); if (E.isLeft(settingsObject)) return E.left(settingsObject.left); try { const userSettings = await this.prisma.userSettings.create({ data: { - properties: settingsObject.right, + settings: settingsObject.right, userUid: user.uid, }, }); const settings: UserSettings = { ...userSettings, - properties: JSON.stringify(userSettings.properties), + userSettings: JSON.stringify(userSettings.settings), }; return E.right(settings); } catch (e) { - return E.left(USER_NOT_FOUND); + return E.left(USER_SETTINGS_EXIST); } } @@ -77,23 +77,23 @@ export class UserSettingsService { * @param properties * @returns */ - async updateUserSettings(user: User, properties: string) { - if (!properties) return E.left(USER_SETTINGS_INVALID_PROPERTIES); + async updateUserSettings(user: User, settingsString: string) { + if (!settingsString) return E.left(USER_SETTINGS_INVALID_PROPERTIES); - const settingsObject = stringToJson(properties); + const settingsObject = stringToJson(settingsString); if (E.isLeft(settingsObject)) return E.left(settingsObject.left); try { const updatedUserSettings = await this.prisma.userSettings.update({ where: { userUid: user.uid }, data: { - properties: settingsObject.right, + settings: settingsObject.right, }, }); const settings: UserSettings = { ...updatedUserSettings, - properties: JSON.stringify(updatedUserSettings.properties), + userSettings: JSON.stringify(updatedUserSettings.settings), }; // Publish subscription for environment creation