const movimentosService = require('../services/movimentos.service'); function validarDadosMovimento(dados) { if (!dados.movimento) { return 'Movimento é obrigatório.'; } if (!['Entrada', 'Saida', 'Sangria', 'Estorno'].includes(dados.movimento)) { return 'Movimento inválido.'; } if (dados.valor === undefined || dados.valor === null || dados.valor === '') { return 'Valor é obrigatório.'; } if (Number(dados.valor) <= 0) { return 'Valor deve ser maior que zero.'; } if (!dados.status) { return 'Situação é obrigatória.'; } if (!['Pago', 'A pagar', 'Recebido', 'A receber'].includes(dados.status)) { return 'Situação inválida.'; } if (!dados.descricao || !String(dados.descricao).trim()) { return 'Descrição é obrigatória.'; } if (!dados.dataentrada) { return 'Data de entrada é obrigatória.'; } return null; } async function listar(req, res) { try { const resultado = await movimentosService.listarMovimentos({ limite: req.query.limite, offset: req.query.offset, page: req.query.page, movimento: req.query.movimento, status: req.query.status, idbancos: req.query.idbancos, idcentrodecustos: req.query.idcentrodecustos, idclientes: req.query.idclientes, idbancos_p: req.query.idbancos_p, referenciaTipo: req.query.referenciaTipo, dataCampo: req.query.dataCampo, dataInicio: req.query.dataInicio, dataFim: req.query.dataFim, busca: req.query.busca, orderBy: req.query.orderBy, orderDirection: req.query.orderDirection, }); return res.json({ ok: true, data: resultado.data, pagination: resultado.pagination, summary: resultado.summary, }); } catch (error) { console.error('Erro ao listar movimentos:', error); return res.status(500).json({ ok: false, message: 'Erro ao listar movimentos.', }); } } async function buscarPorId(req, res) { try { const id = Number(req.params.id); if (!id) { return res.status(400).json({ ok: false, message: 'ID inválido.', }); } const movimento = await movimentosService.buscarMovimentoPorId(id); if (!movimento) { return res.status(404).json({ ok: false, message: 'Movimento não encontrado.', }); } return res.json({ ok: true, data: movimento, }); } catch (error) { console.error('Erro ao buscar movimento:', error); return res.status(500).json({ ok: false, message: 'Erro ao buscar movimento.', }); } } async function criar(req, res) { try { const erroValidacao = validarDadosMovimento(req.body); if (erroValidacao) { return res.status(400).json({ ok: false, message: erroValidacao, }); } const novoMovimento = await movimentosService.criarMovimento(req.user.id, req.body); return res.status(201).json({ ok: true, message: 'Movimento cadastrado com sucesso.', data: novoMovimento, }); } catch (error) { console.error('Erro ao criar movimento:', error); return res.status(500).json({ ok: false, message: 'Erro ao criar movimento.', }); } } async function atualizar(req, res) { try { const id = Number(req.params.id); if (!id) { return res.status(400).json({ ok: false, message: 'ID inválido.', }); } const erroValidacao = validarDadosMovimento(req.body); if (erroValidacao) { return res.status(400).json({ ok: false, message: erroValidacao, }); } const movimentoAtualizado = await movimentosService.atualizarMovimento(id, req.body); if (!movimentoAtualizado) { return res.status(404).json({ ok: false, message: 'Movimento não encontrado.', }); } return res.json({ ok: true, message: 'Movimento atualizado com sucesso.', data: movimentoAtualizado, }); } catch (error) { console.error('Erro ao atualizar movimento:', error); return res.status(500).json({ ok: false, message: 'Erro ao atualizar movimento.', }); } } module.exports = { listar, buscarPorId, criar, atualizar, };