financeiro/financeiro-api/src/modules/movimentos/controllers/movimentos.controller.js

187 lines
4.2 KiB
JavaScript

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,
};