diff --git a/packages/hoppscotch-backend/prisma/schema.prisma b/packages/hoppscotch-backend/prisma/schema.prisma index ab3346a23..6165b3d6a 100644 --- a/packages/hoppscotch-backend/prisma/schema.prisma +++ b/packages/hoppscotch-backend/prisma/schema.prisma @@ -88,11 +88,11 @@ model User { } model UserSettings { - id String @id @default(cuid()) - userUid String @unique - user User @relation(fields: [userUid], references: [uid], onDelete: Cascade) - settings Json - updatedOn DateTime @updatedAt @db.Timestamp(3) + id String @id @default(cuid()) + userUid String @unique + user User @relation(fields: [userUid], references: [uid], onDelete: Cascade) + properties Json + updatedOn DateTime @updatedAt @db.Timestamp(3) } model UserEnvironment { 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 9fabd971f..81d1af84a 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', }) - userSettings: string; // JSON string of the userSettings object (format:[{ key: "background", value: "system" }, ...] ) which will be received from the client + properties: 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 e4e63157c..adabbc772 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.resolver.ts @@ -25,13 +25,13 @@ export class UserSettingsResolver { async createUserSettings( @GqlUser() user: User, @Args({ - name: 'userSettings', + name: 'properties', description: 'Stringified JSON settings object', }) - userSettings: string, + properties: string, ) { const createdUserSettings = - await this.userSettingsService.createUserSettings(user, userSettings); + await this.userSettingsService.createUserSettings(user, properties); if (E.isLeft(createdUserSettings)) throwErr(createdUserSettings.left); return createdUserSettings.right; @@ -44,13 +44,13 @@ export class UserSettingsResolver { async updateUserSettings( @GqlUser() user: User, @Args({ - name: 'userSettings', + name: 'properties', description: 'Stringified JSON settings object', }) - userSettings: string, + properties: string, ) { const updatedUserSettings = - await this.userSettingsService.updateUserSettings(user, userSettings); + await this.userSettingsService.updateUserSettings(user, properties); 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 23626c6a9..a7a47b64e 100644 --- a/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts +++ b/packages/hoppscotch-backend/src/user-settings/user-settings.service.ts @@ -21,7 +21,7 @@ export class UserSettingsService { /** * Fetch user setting for a given user * @param user User object - * @returns an Either of `UserSettings` or error + * @returns Promise of an Either of `UserSettings` or error */ async fetchUserSettings(user: User) { try { @@ -31,9 +31,8 @@ export class UserSettingsService { const settings: UserSettings = { ...userSettings, - userSettings: JSON.stringify(userSettings.settings), + properties: JSON.stringify(userSettings.properties), }; - delete (settings as any).settings; return E.right(settings); } catch (e) { @@ -44,28 +43,30 @@ export class UserSettingsService { /** * Create user setting for a given user * @param user User object - * @param properties User setting properties + * @param properties stringified user settings properties * @returns an Either of `UserSettings` or error */ - async createUserSettings(user: User, settingsString: string) { - if (!settingsString) return E.left(USER_SETTINGS_NULL_SETTINGS); + async createUserSettings(user: User, properties: string) { + if (!properties) return E.left(USER_SETTINGS_NULL_SETTINGS); - const settingsObject = stringToJson(settingsString); - if (E.isLeft(settingsObject)) return E.left(settingsObject.left); + const jsonProperties = stringToJson(properties); + if (E.isLeft(jsonProperties)) return E.left(jsonProperties.left); try { const userSettings = await this.prisma.userSettings.create({ data: { - settings: settingsObject.right, + properties: jsonProperties.right, userUid: user.uid, }, }); const settings: UserSettings = { ...userSettings, - userSettings: JSON.stringify(userSettings.settings), + properties: JSON.stringify(userSettings.properties), }; - delete (settings as any).settings; + + // Publish subscription for environment creation + await this.pubsub.publish(`user_settings/${user.uid}/created`, settings); return E.right(settings); } catch (e) { @@ -76,28 +77,27 @@ export class UserSettingsService { /** * Update user setting for a given user * @param user User object - * @param properties - * @returns + * @param properties stringified user settings + * @returns Promise of an Either of `UserSettings` or error */ - async updateUserSettings(user: User, settingsString: string) { - if (!settingsString) return E.left(USER_SETTINGS_NULL_SETTINGS); + async updateUserSettings(user: User, properties: string) { + if (!properties) return E.left(USER_SETTINGS_NULL_SETTINGS); - const settingsObject = stringToJson(settingsString); - if (E.isLeft(settingsObject)) return E.left(settingsObject.left); + const jsonProperties = stringToJson(properties); + if (E.isLeft(jsonProperties)) return E.left(jsonProperties.left); try { const updatedUserSettings = await this.prisma.userSettings.update({ where: { userUid: user.uid }, data: { - settings: settingsObject.right, + properties: jsonProperties.right, }, }); const settings: UserSettings = { ...updatedUserSettings, - userSettings: JSON.stringify(updatedUserSettings.settings), + properties: JSON.stringify(updatedUserSettings.properties), }; - delete (settings as any).settings; // Publish subscription for environment creation await this.pubsub.publish(`user_settings/${user.uid}/updated`, settings);