Merge pull request #1978 from automatisch/AUT-1105

feat: refactor delete user mutation with the REST API endpoint
This commit is contained in:
Ömer Faruk Aydın
2024-07-22 14:11:35 +02:00
committed by GitHub
7 changed files with 25 additions and 46 deletions

View File

@@ -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,

View File

@@ -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;

View File

@@ -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!

View File

@@ -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]);

View File

@@ -1,6 +0,0 @@
import { gql } from '@apollo/client';
export const DELETE_USER = gql`
mutation DeleteUser($input: DeleteUserInput) {
deleteUser(input: $input)
}
`;

View File

@@ -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;
}

View File

@@ -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",