Refactor despesasService.ts

Refactor `despesasService.ts` into smaller, modular files to improve code organization and maintainability.
This commit is contained in:
gpt-engineer-app[bot] 2025-05-21 11:47:11 +00:00
parent e58db1bb1a
commit 70c125715a
4 changed files with 102 additions and 92 deletions

View File

@ -0,0 +1,91 @@
import { supabase } from "@/integrations/supabase/client";
import { DespesaCartao } from "@/types/cartaoTypes";
/**
* Creates a new expense for a credit card
* @param cartao_id Card ID (kept for backwards compatibility)
* @param cartao_codigo Card code
* @param valor Expense value
* @param data_despesa Expense date
* @param descricao Expense description
* @returns Created expense or null if failed
*/
export async function criarDespesa(
cartao_id: string,
cartao_codigo: string,
valor: number,
data_despesa: string,
descricao: string
): Promise<DespesaCartao | null> {
// Obter o email do usuário do localStorage
const userEmail = localStorage.getItem('userEmail');
// Obter o ID do usuário do localStorage (mantido por compatibilidade)
const userId = localStorage.getItem('userId');
if (!userEmail || !userId) {
console.error('Dados do usuário não encontrados no localStorage');
return null;
}
// Normalizar o email (minúsculo e sem espaços)
const normalizedEmail = userEmail.trim().toLowerCase();
try {
// Obter o nome do cartão diretamente da tabela cartoes_credito
const { data: cartaoData, error: cartaoError } = await supabase
.from('cartoes_credito')
.select('nome')
.eq('id', cartao_id)
.single();
if (cartaoError || !cartaoData) {
console.error('Erro ao obter nome do cartão:', cartaoError);
return null;
}
const nomeCartao = cartaoData.nome;
console.log('Tentando criar despesa de cartão com os dados:', {
login: normalizedEmail,
nome: nomeCartao,
valor,
data_despesa,
descricao
});
// Insert new expense with login and nome (but not cartao_id)
const { data, error } = await supabase
.from('despesas_cartao')
.insert([{
login: normalizedEmail,
nome: nomeCartao,
valor: valor,
data_despesa: data_despesa,
descricao: descricao,
cartao_id: cartao_id // Keep for now to avoid breaking existing functionality
}])
.select();
if (error) {
console.error('Erro ao criar despesa:', error);
throw new Error('Não foi possível adicionar a despesa ao cartão');
}
if (!data || data.length === 0) {
console.error('Nenhum dado retornado ao criar despesa');
return null;
}
// Add cartao_codigo to result
const despesaCompleta = {
...data[0],
cartao_codigo: cartao_codigo
} as DespesaCartao;
return despesaCompleta;
} catch (error) {
console.error('Erro ao criar despesa:', error);
return null;
}
}

View File

@ -1,12 +1,11 @@
import { supabase } from "@/integrations/supabase/client";
import { DespesaCartao } from "@/types/cartaoTypes";
import { getCartao } from "./cartoesService";
import { getCartao } from "../cartoesService";
/**
* Fetches expenses for a specific credit card based on login and nome
* @param cartaoId Card ID (still used for type compatibility)
* @param cardName Card name to match with expenses
* @returns Array of card expenses
*/
export async function getDespesasCartao(cartaoId: string): Promise<DespesaCartao[]> {
@ -59,94 +58,6 @@ export async function getDespesasCartao(cartaoId: string): Promise<DespesaCartao
}
}
/**
* Creates a new expense for a credit card
* @param cartao_id Card ID (kept for backwards compatibility)
* @param cartao_codigo Card code
* @param valor Expense value
* @param data_despesa Expense date
* @param descricao Expense description
* @returns Created expense or null if failed
*/
export async function criarDespesa(
cartao_id: string,
cartao_codigo: string,
valor: number,
data_despesa: string,
descricao: string
): Promise<DespesaCartao | null> {
// Obter o email do usuário do localStorage
const userEmail = localStorage.getItem('userEmail');
// Obter o ID do usuário do localStorage (mantido por compatibilidade)
const userId = localStorage.getItem('userId');
if (!userEmail || !userId) {
console.error('Dados do usuário não encontrados no localStorage');
return null;
}
// Normalizar o email (minúsculo e sem espaços)
const normalizedEmail = userEmail.trim().toLowerCase();
try {
// Obter o nome do cartão diretamente da tabela cartoes_credito
const { data: cartaoData, error: cartaoError } = await supabase
.from('cartoes_credito')
.select('nome')
.eq('id', cartao_id)
.single();
if (cartaoError || !cartaoData) {
console.error('Erro ao obter nome do cartão:', cartaoError);
return null;
}
const nomeCartao = cartaoData.nome;
console.log('Tentando criar despesa de cartão com os dados:', {
login: normalizedEmail,
nome: nomeCartao,
valor,
data_despesa,
descricao
});
// Insert new expense with login and nome (but not cartao_id)
const { data, error } = await supabase
.from('despesas_cartao')
.insert([{
login: normalizedEmail,
nome: nomeCartao,
valor: valor,
data_despesa: data_despesa,
descricao: descricao,
cartao_id: cartao_id // Keep for now to avoid breaking existing functionality
}])
.select();
if (error) {
console.error('Erro ao criar despesa:', error);
throw new Error('Não foi possível adicionar a despesa ao cartão');
}
if (!data || data.length === 0) {
console.error('Nenhum dado retornado ao criar despesa');
return null;
}
// Add cartao_codigo to result
const despesaCompleta = {
...data[0],
cartao_codigo: cartao_codigo
} as DespesaCartao;
return despesaCompleta;
} catch (error) {
console.error('Erro ao criar despesa:', error);
return null;
}
}
/**
* Calculates the total expenses for a credit card based on login and card name
* @param cartaoId Card ID

View File

@ -0,0 +1,8 @@
/**
* Exports all despesas-related functions from separate modules.
* This maintains the existing API surface for backward compatibility.
*/
export { getDespesasCartao, getTotalDespesasCartao } from './despesasFetchService';
export { criarDespesa } from './despesasCreateService';

View File

@ -10,12 +10,12 @@ export {
getCartao
} from './cartao/cartoesService';
// Re-export all functions from despesasService
// Re-export all functions from despesas services
export {
getDespesasCartao,
criarDespesa,
getTotalDespesasCartao
} from './cartao/despesasService';
} from './cartao/despesas';
// Re-export from utilities
export { gerarCartaoCodigo } from './cartao/cartaoCodigoUtils';