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.