From 1aa1f441b3818723d06de107c52bfd1b8b8b28f1 Mon Sep 17 00:00:00 2001 From: "kasia.oczkowska" Date: Thu, 18 Jul 2024 10:14:46 +0100 Subject: [PATCH] feat: refactor delete user mutation with the REST API endpoint --- .../backend/src/graphql/mutation-resolvers.js | 4 ---- .../src/graphql/mutations/delete-user.ee.js | 24 ------------------- packages/backend/src/graphql/schema.graphql | 5 ---- .../components/DeleteUserButton/index.ee.jsx | 16 +++++++------ .../src/graphql/mutations/delete-user.ee.js | 6 ----- packages/web/src/hooks/useAdminUserDelete.js | 15 ++++++++++++ packages/web/src/locales/en.json | 1 + 7 files changed, 25 insertions(+), 46 deletions(-) delete mode 100644 packages/backend/src/graphql/mutations/delete-user.ee.js delete mode 100644 packages/web/src/graphql/mutations/delete-user.ee.js create mode 100644 packages/web/src/hooks/useAdminUserDelete.js diff --git a/packages/backend/src/graphql/mutation-resolvers.js b/packages/backend/src/graphql/mutation-resolvers.js index f66ef243..4d60ae53 100644 --- a/packages/backend/src/graphql/mutation-resolvers.js +++ b/packages/backend/src/graphql/mutation-resolvers.js @@ -29,9 +29,6 @@ import upsertSamlAuthProvider from './mutations/upsert-saml-auth-provider.ee.js' import upsertSamlAuthProvidersRoleMappings from './mutations/upsert-saml-auth-providers-role-mappings.ee.js'; import verifyConnection from './mutations/verify-connection.js'; -// Converted mutations -import deleteUser from './mutations/delete-user.ee.js'; - const mutationResolvers = { createAppAuthClient, createAppConfig, @@ -45,7 +42,6 @@ const mutationResolvers = { deleteFlow, deleteRole, deleteStep, - deleteUser, duplicateFlow, executeFlow, generateAuthUrl, diff --git a/packages/backend/src/graphql/mutations/delete-user.ee.js b/packages/backend/src/graphql/mutations/delete-user.ee.js deleted file mode 100644 index 7b66dd05..00000000 --- a/packages/backend/src/graphql/mutations/delete-user.ee.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Duration } from 'luxon'; -import User from '../../models/user.js'; -import deleteUserQueue from '../../queues/delete-user.ee.js'; - -const deleteUser = async (_parent, params, context) => { - context.currentUser.can('delete', 'User'); - - const id = params.input.id; - - await User.query().deleteById(id); - - const jobName = `Delete user - ${id}`; - const jobPayload = { id }; - const millisecondsFor30Days = Duration.fromObject({ days: 30 }).toMillis(); - const jobOptions = { - delay: millisecondsFor30Days, - }; - - await deleteUserQueue.add(jobName, jobPayload, jobOptions); - - return true; -}; - -export default deleteUser; diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index 36f78e8e..a398cb41 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -14,7 +14,6 @@ type Mutation { deleteFlow(input: DeleteFlowInput): Boolean deleteRole(input: DeleteRoleInput): Boolean deleteStep(input: DeleteStepInput): Step - deleteUser(input: DeleteUserInput): Boolean duplicateFlow(input: DuplicateFlowInput): Flow executeFlow(input: ExecuteFlowInput): executeFlowType generateAuthUrl(input: GenerateAuthUrlInput): AuthLink @@ -381,10 +380,6 @@ input UpdateUserInput { role: UserRoleInput } -input DeleteUserInput { - id: String! -} - input RegisterUserInput { fullName: String! email: String! diff --git a/packages/web/src/components/DeleteUserButton/index.ee.jsx b/packages/web/src/components/DeleteUserButton/index.ee.jsx index 7a28c7e2..de4b918f 100644 --- a/packages/web/src/components/DeleteUserButton/index.ee.jsx +++ b/packages/web/src/components/DeleteUserButton/index.ee.jsx @@ -1,5 +1,4 @@ import PropTypes from 'prop-types'; -import { useMutation } from '@apollo/client'; import DeleteIcon from '@mui/icons-material/Delete'; import IconButton from '@mui/material/IconButton'; import { useQueryClient } from '@tanstack/react-query'; @@ -7,16 +6,14 @@ import { useQueryClient } from '@tanstack/react-query'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import * as React from 'react'; import ConfirmationDialog from 'components/ConfirmationDialog'; -import { DELETE_USER } from 'graphql/mutations/delete-user.ee'; import useFormatMessage from 'hooks/useFormatMessage'; +import useAdminUserDelete from 'hooks/useAdminUserDelete'; function DeleteUserButton(props) { const { userId } = props; const [showConfirmation, setShowConfirmation] = React.useState(false); - const [deleteUser] = useMutation(DELETE_USER, { - variables: { input: { id: userId } }, - refetchQueries: ['GetUsers'], - }); + const { mutateAsync: deleteUser } = useAdminUserDelete(userId); + const formatMessage = useFormatMessage(); const enqueueSnackbar = useEnqueueSnackbar(); const queryClient = useQueryClient(); @@ -33,7 +30,12 @@ function DeleteUserButton(props) { }, }); } catch (error) { - throw new Error('Failed while deleting!'); + enqueueSnackbar( + error?.message || formatMessage('deleteUserButton.deleteError'), + { + variant: 'error', + }, + ); } }, [deleteUser]); diff --git a/packages/web/src/graphql/mutations/delete-user.ee.js b/packages/web/src/graphql/mutations/delete-user.ee.js deleted file mode 100644 index c64916c3..00000000 --- a/packages/web/src/graphql/mutations/delete-user.ee.js +++ /dev/null @@ -1,6 +0,0 @@ -import { gql } from '@apollo/client'; -export const DELETE_USER = gql` - mutation DeleteUser($input: DeleteUserInput) { - deleteUser(input: $input) - } -`; diff --git a/packages/web/src/hooks/useAdminUserDelete.js b/packages/web/src/hooks/useAdminUserDelete.js new file mode 100644 index 00000000..94deb2ac --- /dev/null +++ b/packages/web/src/hooks/useAdminUserDelete.js @@ -0,0 +1,15 @@ +import { useMutation } from '@tanstack/react-query'; + +import api from 'helpers/api'; + +export default function useAdminUserDelete(userId) { + const mutation = useMutation({ + mutationFn: async () => { + const { data } = await api.delete(`/v1/admin/users/${userId}`); + + return data; + }, + }); + + return mutation; +} diff --git a/packages/web/src/locales/en.json b/packages/web/src/locales/en.json index ba72f98b..e65d0ecd 100644 --- a/packages/web/src/locales/en.json +++ b/packages/web/src/locales/en.json @@ -213,6 +213,7 @@ "deleteUserButton.cancel": "Cancel", "deleteUserButton.confirm": "Delete", "deleteUserButton.successfullyDeleted": "The user has been deleted.", + "deleteUserButton.deleteError": "Failed while deleting!", "createUserPage.title": "Create user", "userForm.fullName": "Full name", "userForm.email": "Email",