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 upsertSamlAuthProvidersRoleMappings from './mutations/upsert-saml-auth-providers-role-mappings.ee.js';
import verifyConnection from './mutations/verify-connection.js'; import verifyConnection from './mutations/verify-connection.js';
// Converted mutations
import deleteUser from './mutations/delete-user.ee.js';
const mutationResolvers = { const mutationResolvers = {
createAppAuthClient, createAppAuthClient,
createAppConfig, createAppConfig,
@@ -45,7 +42,6 @@ const mutationResolvers = {
deleteFlow, deleteFlow,
deleteRole, deleteRole,
deleteStep, deleteStep,
deleteUser,
duplicateFlow, duplicateFlow,
executeFlow, executeFlow,
generateAuthUrl, 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 deleteFlow(input: DeleteFlowInput): Boolean
deleteRole(input: DeleteRoleInput): Boolean deleteRole(input: DeleteRoleInput): Boolean
deleteStep(input: DeleteStepInput): Step deleteStep(input: DeleteStepInput): Step
deleteUser(input: DeleteUserInput): Boolean
duplicateFlow(input: DuplicateFlowInput): Flow duplicateFlow(input: DuplicateFlowInput): Flow
executeFlow(input: ExecuteFlowInput): executeFlowType executeFlow(input: ExecuteFlowInput): executeFlowType
generateAuthUrl(input: GenerateAuthUrlInput): AuthLink generateAuthUrl(input: GenerateAuthUrlInput): AuthLink
@@ -381,10 +380,6 @@ input UpdateUserInput {
role: UserRoleInput role: UserRoleInput
} }
input DeleteUserInput {
id: String!
}
input RegisterUserInput { input RegisterUserInput {
fullName: String! fullName: String!
email: String! email: String!

View File

@@ -1,5 +1,4 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useMutation } from '@apollo/client';
import DeleteIcon from '@mui/icons-material/Delete'; import DeleteIcon from '@mui/icons-material/Delete';
import IconButton from '@mui/material/IconButton'; import IconButton from '@mui/material/IconButton';
import { useQueryClient } from '@tanstack/react-query'; import { useQueryClient } from '@tanstack/react-query';
@@ -7,16 +6,14 @@ import { useQueryClient } from '@tanstack/react-query';
import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar';
import * as React from 'react'; import * as React from 'react';
import ConfirmationDialog from 'components/ConfirmationDialog'; import ConfirmationDialog from 'components/ConfirmationDialog';
import { DELETE_USER } from 'graphql/mutations/delete-user.ee';
import useFormatMessage from 'hooks/useFormatMessage'; import useFormatMessage from 'hooks/useFormatMessage';
import useAdminUserDelete from 'hooks/useAdminUserDelete';
function DeleteUserButton(props) { function DeleteUserButton(props) {
const { userId } = props; const { userId } = props;
const [showConfirmation, setShowConfirmation] = React.useState(false); const [showConfirmation, setShowConfirmation] = React.useState(false);
const [deleteUser] = useMutation(DELETE_USER, { const { mutateAsync: deleteUser } = useAdminUserDelete(userId);
variables: { input: { id: userId } },
refetchQueries: ['GetUsers'],
});
const formatMessage = useFormatMessage(); const formatMessage = useFormatMessage();
const enqueueSnackbar = useEnqueueSnackbar(); const enqueueSnackbar = useEnqueueSnackbar();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
@@ -33,7 +30,12 @@ function DeleteUserButton(props) {
}, },
}); });
} catch (error) { } catch (error) {
throw new Error('Failed while deleting!'); enqueueSnackbar(
error?.message || formatMessage('deleteUserButton.deleteError'),
{
variant: 'error',
},
);
} }
}, [deleteUser]); }, [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.cancel": "Cancel",
"deleteUserButton.confirm": "Delete", "deleteUserButton.confirm": "Delete",
"deleteUserButton.successfullyDeleted": "The user has been deleted.", "deleteUserButton.successfullyDeleted": "The user has been deleted.",
"deleteUserButton.deleteError": "Failed while deleting!",
"createUserPage.title": "Create user", "createUserPage.title": "Create user",
"userForm.fullName": "Full name", "userForm.fullName": "Full name",
"userForm.email": "Email", "userForm.email": "Email",