diff --git a/packages/hoppscotch-backend/src/admin/admin.service.ts b/packages/hoppscotch-backend/src/admin/admin.service.ts index 514eb3402..2afc53123 100644 --- a/packages/hoppscotch-backend/src/admin/admin.service.ts +++ b/packages/hoppscotch-backend/src/admin/admin.service.ts @@ -9,6 +9,7 @@ import { DUPLICATE_EMAIL, EMAIL_FAILED, INVALID_EMAIL, + ONLY_ONE_ADMIN_ACCOUNT, TEAM_INVITE_ALREADY_MEMBER, USER_ALREADY_INVITED, USER_IS_ADMIN, @@ -348,6 +349,9 @@ export class AdminService { * @returns an Either of boolean or error */ async removeUserAsAdmin(userUID: string) { + const adminUsers = await this.userService.fetchAdminUsers(); + if (adminUsers.length === 1) return E.left(ONLY_ONE_ADMIN_ACCOUNT); + const admin = await this.userService.removeUserAsAdmin(userUID); if (E.isLeft(admin)) return E.left(admin.left); return E.right(true); diff --git a/packages/hoppscotch-backend/src/errors.ts b/packages/hoppscotch-backend/src/errors.ts index 92540176c..247797bcc 100644 --- a/packages/hoppscotch-backend/src/errors.ts +++ b/packages/hoppscotch-backend/src/errors.ts @@ -3,6 +3,13 @@ export const INVALID_EMAIL = 'invalid/email' as const; export const EMAIL_FAILED = 'email/failed' as const; export const DUPLICATE_EMAIL = 'email/both_emails_cannot_be_same' as const; +/** + * Only one admin account found in infra + * (AdminService) + */ +export const ONLY_ONE_ADMIN_ACCOUNT = + 'admin/only_one_admin_account_found' as const; + /** * Token Authorization failed (Check 'Authorization' Header) * (GqlAuthGuard)