Skip to content

Commit

Permalink
feat: finalizado requisito 07
Browse files Browse the repository at this point in the history
  • Loading branch information
Gabrielja2 committed Oct 8, 2022
1 parent 0ec7424 commit adc2e98
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 3 deletions.
1 change: 0 additions & 1 deletion src/middlewares/middlewareLogin.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// import 'express-async-errors';
import { Request, Response, NextFunction } from 'express';
import CustomError from '../helpers/CustomError';
import loginSchema from '../schemas/loginSchema';
Expand Down
1 change: 0 additions & 1 deletion src/middlewares/middlewareProducts.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// import 'express-async-errors';
import { Request, Response, NextFunction } from 'express';
import CustomError from '../helpers/CustomError';
import productSchema from '../schemas/productSchema';
Expand Down
44 changes: 44 additions & 0 deletions src/middlewares/middlewareUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { Request, Response, NextFunction } from 'express';
import CustomError from '../helpers/CustomError';
import userSchema from '../schemas/userSchema';

function userMiddleware(req: Request, res: Response, next: NextFunction) {
const { username, classe, level, password } = req.body;
const { error } = userSchema.validate(
{ username, classe, level, password },
);

if (error?.details[0].type === 'string.min') {
throw new CustomError(422, error.message);
}

if (error?.details[0].type === 'string.base') {
throw new CustomError(422, error.message);
}

if (error?.details[0].type === 'number.greater') {
throw new CustomError(422, error.message);
}

if (error) {
throw new CustomError(400, error.message);
}

next();
}

export function levelMiddleware(req: Request, res: Response, next: NextFunction) {
const { level } = req.body;

if (level === undefined) {
throw new CustomError(400, '"level" is required');
}

if (typeof level !== 'number') {
throw new CustomError(422, '"level" must be a number');
}

next();
}

export default userMiddleware;
3 changes: 2 additions & 1 deletion src/routers/userRouter.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Router } from 'express';
import UserController from '../controllers/UserController';
import userMiddleware, { levelMiddleware } from '../middlewares/middlewareUser';

const router = Router();
const userController = new UserController();

router.post('/', userController.newUser);
router.post('/', levelMiddleware, userMiddleware, userController.newUser);

export default router;
22 changes: 22 additions & 0 deletions src/schemas/userSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import Joi from 'joi';

const userSchema = Joi.object({
username: Joi.string().min(3).required().messages({
'string.empty': '"username" is required',
'string.min': '"username" length must be at least 3 characters long',
}),
classe: Joi.string().min(3).required().messages({
'string.empty': '"classe" is required',
'string.min': '"classe" length must be at least 3 characters long',
}),
level: Joi.number().greater(0).required().messages({
'number.empty': '"level" is required',
'number.greater': '"level" must be greater than or equal to 1',
}),
password: Joi.string().min(8).required().messages({
'string.empty': '"password" is required',
'string.min': '"password" length must be at least 8 characters long',
}),
});

export default userSchema;

0 comments on commit adc2e98

Please sign in to comment.