Define your endpoint on routes.js
file.
router.delete( "/delete-user/:userId", authentication, authorise({ roles: [ADMIN] }), deleteUserById );
In this endpoint we use url, middlewares and controller.
- First define your url,
- Check if the user logged in, (authentication)
Authorise if user is admin, guest what so ever. (authorise- OPTIONAL)
define the controller.
Our endpoint deletes user records by user id.That means it checks user's id from req.params, validates it with yup then removes user with action function then it gives the response.
const removeUserById = require("~root/actions/users/removeUserById");
const handleAPIError = require("~root/utils/handleAPIError");
const deleteUserByIdSchema = require("./schemas/deleteUserByIdSchema");
const deleteUserById = async (req, res) => {
const { userId } = req.params;
try {
await deleteUserByIdSchema.validate(
{ userId },
{
abortEarly: false
}
);
await removeUserById({
userId
});
res.status(200).send();
} catch (err) {
handleAPIError(res, err);
}
};
module.exports = deleteUserById;
Quick tip: Controller:"delete" (Controllers always named as CRUD operations. Thats why controllers always named as delete,put,post,get etc.) => Action:"remove"
- After creating your controller create your action. Action is an async function. It has
userId
as parameter and it returns{deleteUser}
.
const deleteUserById = require("./queries/deleteUserById");
const removeUserById = async ({ userId }) => {
const deletedUser = await deleteUserById({ userId });
return { deletedUser };
};
module.exports = removeUserById;
- Once you create your action you need a query for it. Create a queries folder inside your
removeUserById
folder. We are using MySQL for this project. Basically we need to tell our database that "find the user record associated with user_id from users table".
const { submitQuery } = require("~root/lib/database");
const deleteUserById = ({ userId }) => submitQuery`
DELETE FROM users
WHERE user_id = ${userId};
`;
module.exports = deleteUserById;
- After creating your query we can validate the process with yup. Create a
schemas
folder insidedeleteUserById
folder. You can validate if user_id is number,required?, positive(!-), integer? or has a label("").
const yup = require("yup");
const deleteCuttingToolByIdSchema = yup.object().shape({
userId: yup
.number()
.required()
.positive()
.integer()
.label("User ID")
.typeError("User ID must be a number.")
});
module.exports = deleteCuttingToolByIdSchema
- After this process your need to play with projects database-schema. In this scenario we have a parent table which is users table. Also there are 2 child tables. That's why we can use
ON DELETE CASCADE
command from MySql. This command deletes the record for every records that includes ON CASCADE DELETE command. It follows. That's why we put that command to FOREING KEYs. Below changes should be made to any table which references user_id column.
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
- Test it on Postman by making a call to DELETE /delete-user/1
Top comments (0)