1
resposta

Código retornando erro após refatorar o método adiciona

Meu código está retornando o seguinte erro toda vez que tento executar:

(node:13428) UnhandledPromiseRejectionWarning: Error: ER_EMPTY_QUERY: Query was empty
    at Query.Sequence._packetToError (C:\Users\steph\OneDrive\Área de Trabalho\Alura\Rest com NodeJS\nodejs-api-rest\nodejs-api-rest\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
.
.
.

O meu código models/atendimentos é o seguinte:

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

class Atendimento {
    adiciona(atendimento) {
        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')

        const dataEhValida = moment(Data).isSameOrAfter(DataCriacao)
        const clienteEhValido = atendimento.Cliente.length >= 5

        const validacoes = [
            {
                nome: 'Data',
                valido: dataEhValida,
                mensagem: 'A data de agendamento deve ser maior ou igual a data atual'
            },
            {
                nome: 'Cliente',
                valido: clienteEhValido,
                mensagem: 'O nome do cliente deve ter pelo menos 5 caracteres'
            }
        ]

        const erros = validacoes.filter(campo => !campo.valido)
        const existemErros = erros.length

        if(existemErros) {
            return new Promise((resolve, reject) => reject(erros))
        } else {
            const atendimentoDatado = {...atendimento, DataCriacao, Data}

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

    lista(res) {
        const sql = 'SELECT * FROM Atendimentos'
        conexao.query(sql, (erro, resultados) => {
            if(erro) {
                res.status(400).json(erro)
            } else {
                res.status(200).json(resultados)
            }
        })
    }

    buscaPorId(id, res) {
        const sql = `SELECT * FROM Atendimentos WHERE id=${id}`

        conexao.query(sql, async (erro, resultados) => {  
            const atendimento = resultados[0]
            const cpf = atendimento.Cliente

            if(erro) {
                res.status(400).json(erro)
            } else {
                const {data} = await axios.get(`http://localhost:8082/${cpf}`)
                atendimento.Cliente = data
                res.status(200).json(atendimento)
            }
        })
    }

    altera(id, valores, res) {
        if(valores.Data) {
            valores.Data = moment(valores.Data, 'DD/MM/YYYY').format('YYYY-MM-DD HH:MM:SS')
        }

        const sql = 'UPDATE Atendimentos SET ? WHERE id=?'

        conexao.query(sql, [valores, id], (erro, resultados) => {
            if(erro) {
                res.status(400).json(erro)
            } else {
                res.status(200).json({...valores, id})
            }
        })
    }

    deleta(id, res) {
        const sql = 'DELETE FROM Atendimentos WHERE id=?'

        conexao.query(sql, id, (erro, resultados) => {
            if(erro) {
                res.status(400).json(erro)
            } else {
                res.status(200).json({id})
            }
        })
    }
}

module.exports = new Atendimento()

O meu código da Infraestrutura/database/queries é:

const { query } = require('./conexao')
const conexao = require('./conexao')

const executaQuery = (query, parametros = '') => {
    return new Promise((resolve, reject) => {
        conexao.query(query, parametros, (erros, resultados, campos) => {
            if(erros) {
                reject(erros)
            } else {
                resolve(resultados)
            }
        })
    })
}

module.exports = executaQuery()

Alguém sabe o que pode ter dado de errado?

1 resposta

Fala Sthéphani, tudo bem ?

Pedimos desculpas pela demora para a resposta!

Você ainda permanece com o mesmo erro?

Se sim, o problema é que, em queries você está exportando a função ja sendo executada, ou seja, dentro do repositório não conseguimos executar passando os parâmetros necessários para o funcionamento dela, então para resolver esse problema basta remover os parênteses, assim ficando a exportação:

module.exports = executaQuery;

Espero ter ajudado, bons estudos :D