Para validação dos dados no front-end a biblioteca yup é muito boa
No back-end vamos utilizar a biblioteca celebrate que integra muito bem com o express
Vamos nistalar o celebrate no nosso projeto do back-end
npm install celebrate
npm install @types/hapi__joi -D
Vamos trabalhar em routes.ts com a rota de cadastro que é única rota de cadastro e que precisa de validação.
Vamos importar o celebrate e o Joi, que é a biblioteca que o celebrate se base. Em sequência vamos utilizar o celebrate na nossa rota post. Ele consegue fazer vários tipos de validações, mas nós vamos utilizar agora validação para o body que é onde estão todos os campos
routes.post(
'/points',
upload.single('image'),
celebrate({
body: Joi.object().keys({
name: Joi.string().required(),
email: Joi.string().required().email(),
whatsapp: Joi.number().required(),
latitude: Joi.number().required(),
longitude: Joi.number().required(),
city: Joi.string().required(),
uf: Joi.string().required().max(2),
items: Joi.string().required(),
})
}),
pointsController.create
)
A validação de imagem podemos fazer pelo multer no filterImage se quisermos
No server.ts vamos importar errors de celebrate, que nos trará uma forma de como vamos lidar com os erros e mostrar no front-end

Agora vamos testar fazendo uma requisição no Insomnia
→ Primeiro com os dados certos, do mesmo jeito que fizemos a última (tem que funcionar)

→ Agora vamos testar tirando o nome

Perceba que deu erro, mas se mais de um campo não for preenchido vai retornar apenas o primiro erro.
Então na nossa configuração de validações vamo passar um segundo objeto para o celebrate e a propriedade abortEarly como false, assim ele vai retornar todos os erros
