Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Serviço instável

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}  )
            }   
        })*/
        }
    }
1 resposta
solução!

O problema do código intermetente eu corrigi mudando o padrão de datas removendo os segundo, pois como a data e hora não era inserida as vezes ele pegava o valor 00:00:00 e apresentava o erro. o código ficou assim. Também arrumei o código que valida a quantidade de caracteres do cliente.

        const dataCriacao = moment().format('YYYY-MM-DD HH:MM')
        const data = moment(atendimento.data, 'DD/MM/YYYY').format('YYYY-MM-DD HH:MM')


        this.clienteEhValido = ({tamanho}) => tamanho > 5