Boa tarde,
O serviço ensinado neste curso ele é muito instável. Eu realizei um teste cadastrando um cliente e sempre apresenta o erro de validação da data ou cliente "intermitente " clicando no postam 3x em sequencia e o sistema apresentou erros de validação diferente. Acho importante vocês revisarem o código, corrigir o código publicado e rever o material ministrado. Fiz um teste baixando o código de vocês no GitHUB e o erro foi o mesmo. Já validei e o body esta seno passado corretamente.
const moment = require('moment')
const axios = require('axios')
//const atendimentos = require('../controllers/atendimentos')
const conexao = require('../infraestrutura/database/conexao')
const repositorio = require('../repositorios/atendimentos')
class Atendimento {
constructor(){
//valida se a data é maior que a data de criação
this.dataValida = ({data, dataCriacao}) => moment(data).isSameOrAfter(dataCriacao)
//valida se a propridade cliente é maior que 5
this.clienteEhValido = tamanho => tamanho >= 5
this.valida = parametros =>
this.validacoes.filter(campo => {
const { nome } = campo
const parametro = parametros[nome]
return !campo.valido(parametro)
})
//objeto de validação
this.validacoes = [
{
nome: 'data',
valido: this.dataValida,
mensagem: 'Data de agendamento é maior que a data atual'
},
{
nome: 'cliente',
valido: this.clienteEhValido,
mensagem: 'Cliente deve ter mais que 5 caracteres'
}
]
}
adiciona(atendimento){
//valida formato da data com a biblioteca moment
const dataCriacao = moment().format('YYYY-MM-DD HH:MM:SS')
const data = moment(atendimento.data, 'DD/MM/YYYY').format('YYYY-MM-DD HH:MM:SS')
//objeto de validação do campo data e cliente
const parametros ={
data: { data, dataCriacao },
cliente: { tamanho: atendimento.cliente.length }
}
//filtra se existem erros
//const erros = validacoes.filter(campo => !campo.valido)
//valida tamanho do erro
const erros = this.valida(parametros)
const existemErros = erros.length
//valida se existem erros e direciona para erro ou sucesso
if(existemErros){
//crio o promessa de envio do erro, como neste eventou estou tratando apenas o que foi recusado, não escrevi o resolve no objeto, quem vai devolver o erro para o client é a classe controller
return new Promise((resolve, reject) => reject(erros))
//res.status(400).json(erros)
} else {
const atendimentoDatado = {...atendimento, dataCriacao, data}
//chama a função de promise adiciona e passa o parametro do atendimentoDatado
return repositorio.adiciona(atendimentoDatado)
.then(resultados => {
const id = resultados.insertId
return ({...atendimentoDatado, id} )
})
/* processo de conexão manual foi eliminado e agora utilizamos o metodo de promessa
conexao.query(sql, atendimentoDatado, (erro, resultados) => {
if(erro){
//console.log(erro);
res.status(400).json(erro)
} else {
//console.log(resultados);
const id = resultados.insertId
res.status(201).json({...atendimentoDatado, id} )
}
})*/
}
}