diff --git a/packages/backend/src/graphql/mutation-resolvers.ts b/packages/backend/src/graphql/mutation-resolvers.ts index 5d8b8615..c19411c1 100644 --- a/packages/backend/src/graphql/mutation-resolvers.ts +++ b/packages/backend/src/graphql/mutation-resolvers.ts @@ -13,6 +13,7 @@ import createStep from './mutations/create-step'; import updateStep from './mutations/update-step'; import deleteStep from './mutations/delete-step'; import createUser from './mutations/create-user.ee'; +import deleteUser from './mutations/delete-user.ee'; import updateUser from './mutations/update-user'; import forgotPassword from './mutations/forgot-password.ee'; import resetPassword from './mutations/reset-password.ee'; @@ -34,6 +35,7 @@ const mutationResolvers = { updateStep, deleteStep, createUser, + deleteUser, updateUser, forgotPassword, resetPassword, diff --git a/packages/backend/src/graphql/mutations/delete-user.ee.ts b/packages/backend/src/graphql/mutations/delete-user.ee.ts new file mode 100644 index 00000000..b1f83097 --- /dev/null +++ b/packages/backend/src/graphql/mutations/delete-user.ee.ts @@ -0,0 +1,31 @@ +import User from '../../models/user'; +import deleteUserQueue from '../../queues/delete-user.ee'; +import { Duration } from 'luxon'; + +type Params = { + input: { + id: string; + }; +}; + +const deleteUser = async (_parent: unknown, params: Params) => { + const { id } = params.input; + await User + .query() + .findById(id) + .delete() + .throwIfNotFound(); + + 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 1e09a90e..d40af41f 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -54,6 +54,7 @@ type Mutation { updateStep(input: UpdateStepInput): Step deleteStep(input: DeleteStepInput): Step createUser(input: CreateUserInput): User + deleteUser(input: DeleteUserInput): Boolean updateUser(input: UpdateUserInput): User forgotPassword(input: ForgotPasswordInput): Boolean resetPassword(input: ResetPasswordInput): Boolean @@ -339,6 +340,10 @@ input CreateUserInput { password: String! } +input DeleteUserInput { + id: String +} + input UpdateUserInput { email: String password: String