Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Consegui refatorar todos os métodos e todos estão funcionando, porém o método adiciona está trazendo o seguinte erro para mim:

const moment = require('moment');
const axios = require('axios');
const conexao = require('../infraestrutura/database/conexao');
const repositorio = require('../repositorios/atendimento');

class Atendimento {
    constructor() {

        this.dataEhValida = ({ data, dataCriacao }) => moment(data).isSameOrAfter(dataCriacao)
        this.clienteEhValido = (tamanho) => tamanho >= 5

        this.valida = parametros =>
            this.validacoes.filter(campo => {
                const { nome } = campo
                const parametro = parametros[nome]

                return !campo.valido(parametro)
            })

        this.validacoes = [
            {
                nome: 'data',
                valido: this.dataEhValida,
                mensagem: 'Data deve ser maior ou igual a data atual'
            },
            {
                nome: 'cliente',
                valido: this.clienteEhValido,
                mensagem: 'Nome do cliente deve ter pelo menos 5 caracteres'
            }
        ]
    }

    adiciona(atendimento) {
        // antes de fazeros nossa query sql, precisamos settar as datas de atendimento
        const dataCriacao = moment().format('YYYY-MM-DD HH:mm:ss')

        // manipulando a data recebida pelo usuario e formatando a mesma usando a biblioteca moment
        const data = moment(atendimento.data, 'DD/MM/YYYY').format('YYYY-MM-DD HH:mm:ss')

        const parametros = {
            data: { data, dataCriacao },
            cliente: { tamanho: atendimento.cliente.length }
        }

        /* pegando as validacoes e filtrando somente o que estiver errado
           para cada campo que estivermos enviando, se ele for valido, nao precisamos retornar 
           só iremos retornar ele se ele nao for valido */
        const erros = this.valida(parametros)

        // se erros.length for zero, consideramos que é false já que nao tem nenhum erro ali
        const existemErros = erros.length

        if (existemErros) {
            return new Promise((resolve, reject) => reject(erros));
        } else {
            /* criando um atendimento com a data de criacao
           fazemos um array com tudo que estiver dentro de atendimento mais a data de criacao
           {...atendimento, dataCriacao} */
            const atendimentoDatado = { ...atendimento, dataCriacao, data }

            return repositorio.adiciona(atendimentoDatado)
                .then(resultados => {
                    const id = resultados.insertId;
                    return { ...atendimento, id }
                });
        }
    }

    lista() {
        return repositorio.lista()
    }

    findById(id) {

        return repositorio.findById(id)
            .then(async resultados => {
                const atendimento = resultados[0]

                // quando tivermos o resultado dessa query em maos, ja sabemos qual é o cpf do cliente que desejamos manipular, então esse é o momento que vamos buscar as informações
                const cpf = atendimento.cliente; // nome do campo que salvaremos

                // logica la embaixo
                const { data } = await axios.get(`http://localhost:8082/${cpf}`);

                atendimento.cliente = data;

                return atendimento;
            })
    }

    altera(id, valores) {
        return repositorio.altera(id, valores)
            .then(resultados => {
                return (resultados)
            })
    }

    remove(id) {

        return repositorio.remove(id)
            .then(() => {
                return { id }
            })
    }
}

module.exports = new Atendimento

erro:

[ { "nome": "cliente", "mensagem": "Nome do cliente deve ter pelo menos 5 caracteres" } ]

Ele está caindo nesse filtro dos erros e não consigo achar de jeito nenhum onde está o problema.

4 respostas

Thales, boa noite. Tudo bem?

Então olha essa linha aqui this.clienteEhValido = (tamanho) => tamanho >= 5

Ela que esta segurando tratando essa regra. Você pode tentar inserir um nome de cliente maior que 5?

Abraço.

Sim Rodrigo, mesmo inserindo mais do que 5 está caindo no erro...

Estou com o mesmo problema

solução!

Pessoal, acho que descobri. O ponto é que é passada um objeto para a função, daí é preciso fazer com que a função espere um objeto. Foi assim que funcionou para mim.

Troque esta linha:

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

Por esta com chaves no parâmetro de entrada:

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