From a4c889e38d0ce236f99175e5fa487fc6d0878056 Mon Sep 17 00:00:00 2001 From: mirarifhasan Date: Mon, 29 Jan 2024 18:35:50 +0600 Subject: [PATCH] feat: update user display name mutation added --- .../src/admin/admin.resolver.ts | 25 +++++++++++++++++++ .../src/admin/admin.service.ts | 13 ++++++++++ .../src/user/user.service.ts | 24 ++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/packages/hoppscotch-backend/src/admin/admin.resolver.ts b/packages/hoppscotch-backend/src/admin/admin.resolver.ts index d9fd5bde7..84a63ebd2 100644 --- a/packages/hoppscotch-backend/src/admin/admin.resolver.ts +++ b/packages/hoppscotch-backend/src/admin/admin.resolver.ts @@ -314,6 +314,31 @@ export class AdminResolver { return admin.right; } + @Mutation(() => Boolean, { + description: 'Update user display name', + }) + @UseGuards(GqlAuthGuard, GqlAdminGuard) + async updateUserDisplayNameByAdmin( + @Args({ + name: 'userUID', + description: 'users UID', + type: () => ID, + }) + userUID: string, + @Args({ + name: 'displayName', + description: 'users display name', + }) + displayName: string, + ): Promise { + const isUpdated = await this.adminService.updateUserDisplayName( + userUID, + displayName, + ); + if (E.isLeft(isUpdated)) throwErr(isUpdated.left); + return isUpdated.right; + } + @Mutation(() => Boolean, { description: 'Remove user as admin', }) diff --git a/packages/hoppscotch-backend/src/admin/admin.service.ts b/packages/hoppscotch-backend/src/admin/admin.service.ts index e16f3c6e2..672a829fb 100644 --- a/packages/hoppscotch-backend/src/admin/admin.service.ts +++ b/packages/hoppscotch-backend/src/admin/admin.service.ts @@ -118,6 +118,19 @@ export class AdminService { return E.right(invitedUser); } + /** + * Update the display name of a user + * @param userUid Who's display name is being updated + * @param displayName New display name of the user + * @returns an Either of boolean or error + */ + async updateUserDisplayName(userUid: string, displayName: string) { + const updatedUser = await this.userService.updateUser(userUid, displayName); + if (E.isLeft(updatedUser)) return E.left(updatedUser.left); + + return E.right(true); + } + /** * Revoke infra level user invitation * @param inviteeEmail Invitee's email diff --git a/packages/hoppscotch-backend/src/user/user.service.ts b/packages/hoppscotch-backend/src/user/user.service.ts index 379820124..68437a5d4 100644 --- a/packages/hoppscotch-backend/src/user/user.service.ts +++ b/packages/hoppscotch-backend/src/user/user.service.ts @@ -270,6 +270,30 @@ export class UserService { } } + /** + * Update a user's data + * @param userUID User UID + * @param displayName User's displayName + * @returns a Either of User or error + */ + async updateUser(userUID: string, displayName: string) { + try { + const dbUpdatedUser = await this.prisma.user.update({ + where: { uid: userUID }, + data: { displayName }, + }); + + const updatedUser = this.convertDbUserToUser(dbUpdatedUser); + + // Publish subscription for user updates + await this.pubsub.publish(`user/${updatedUser.uid}/updated`, updatedUser); + + return E.right(updatedUser); + } catch (error) { + return E.left(USER_NOT_FOUND); + } + } + /** * Validate and parse currentRESTSession and currentGQLSession * @param sessionData string of the session