From 70c125715a4e5bbeffdc6f656bc643a0ac0b3298 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 11:47:11 +0000 Subject: [PATCH] Refactor despesasService.ts Refactor `despesasService.ts` into smaller, modular files to improve code organization and maintainability. --- .../cartao/despesas/despesasCreateService.ts | 91 +++++++++++++++++++ .../despesasFetchService.ts} | 91 +------------------ src/services/cartao/despesas/index.ts | 8 ++ src/services/cartaoCreditoService.ts | 4 +- 4 files changed, 102 insertions(+), 92 deletions(-) create mode 100644 src/services/cartao/despesas/despesasCreateService.ts rename src/services/cartao/{despesasService.ts => despesas/despesasFetchService.ts} (58%) create mode 100644 src/services/cartao/despesas/index.ts diff --git a/src/services/cartao/despesas/despesasCreateService.ts b/src/services/cartao/despesas/despesasCreateService.ts new file mode 100644 index 0000000..4ea11f1 --- /dev/null +++ b/src/services/cartao/despesas/despesasCreateService.ts @@ -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 { + // 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; + } +} diff --git a/src/services/cartao/despesasService.ts b/src/services/cartao/despesas/despesasFetchService.ts similarity index 58% rename from src/services/cartao/despesasService.ts rename to src/services/cartao/despesas/despesasFetchService.ts index f8c2b87..865b511 100644 --- a/src/services/cartao/despesasService.ts +++ b/src/services/cartao/despesas/despesasFetchService.ts @@ -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 { @@ -59,94 +58,6 @@ export async function getDespesasCartao(cartaoId: string): Promise { - // 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 diff --git a/src/services/cartao/despesas/index.ts b/src/services/cartao/despesas/index.ts new file mode 100644 index 0000000..7575435 --- /dev/null +++ b/src/services/cartao/despesas/index.ts @@ -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'; diff --git a/src/services/cartaoCreditoService.ts b/src/services/cartaoCreditoService.ts index 3743dd5..5e1942e 100644 --- a/src/services/cartaoCreditoService.ts +++ b/src/services/cartaoCreditoService.ts @@ -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';