Run SQL to add user email and WhatsApp

Adds email and WhatsApp columns to the contas_recorrentes table and updates existing records.
This commit is contained in:
gpt-engineer-app[bot] 2025-06-23 21:58:48 +00:00
parent 7661a8ccf3
commit 1c372aa03b
4 changed files with 57 additions and 3 deletions

View File

@ -10,6 +10,7 @@ import { useForm } from 'react-hook-form';
import { supabase } from '@/integrations/supabase/client'; import { supabase } from '@/integrations/supabase/client';
import { toast } from 'sonner'; import { toast } from 'sonner';
import { useAuthStore } from '@/stores/authStore'; import { useAuthStore } from '@/stores/authStore';
import { useQuery } from '@tanstack/react-query';
interface ContaRecorrenteFormProps { interface ContaRecorrenteFormProps {
onClose: () => void; onClose: () => void;
@ -34,19 +35,44 @@ const ContaRecorrenteForm = ({ onClose, onSuccess }: ContaRecorrenteFormProps) =
} }
}); });
// Buscar dados do usuário para pegar email e whatsapp
const { data: userData } = useQuery({
queryKey: ['user-data', user?.id],
queryFn: async () => {
if (!user?.id) return null;
const { data, error } = await supabase
.from('usuarios')
.select('email, whatsapp')
.eq('id', user.id)
.single();
if (error) throw error;
return data;
},
enabled: !!user?.id
});
const onSubmit = async (data: FormData) => { const onSubmit = async (data: FormData) => {
if (!user?.id) { if (!user?.id) {
toast.error('Usuário não encontrado. Faça login novamente.'); toast.error('Usuário não encontrado. Faça login novamente.');
return; return;
} }
if (!userData) {
toast.error('Dados do usuário não encontrados.');
return;
}
try { try {
const { error } = await supabase const { error } = await supabase
.from('contas_recorrentes') .from('contas_recorrentes')
.insert([{ .insert([{
...data, ...data,
user_id: user.id, user_id: user.id,
valor: data.valor || null valor: data.valor || null,
email_usuario: userData.email,
whatsapp_usuario: userData.whatsapp
}]); }]);
if (error) throw error; if (error) throw error;

View File

@ -207,12 +207,14 @@ export type Database = {
descricao: string | null descricao: string | null
dia_vencimento: number dia_vencimento: number
dias_antecedencia: number dias_antecedencia: number
email_usuario: string | null
hora_aviso: string hora_aviso: string
id: string id: string
nome_conta: string nome_conta: string
updated_at: string updated_at: string
user_id: string user_id: string
valor: number | null valor: number | null
whatsapp_usuario: string | null
} }
Insert: { Insert: {
ativo?: boolean ativo?: boolean
@ -220,12 +222,14 @@ export type Database = {
descricao?: string | null descricao?: string | null
dia_vencimento: number dia_vencimento: number
dias_antecedencia?: number dias_antecedencia?: number
email_usuario?: string | null
hora_aviso?: string hora_aviso?: string
id?: string id?: string
nome_conta: string nome_conta: string
updated_at?: string updated_at?: string
user_id: string user_id: string
valor?: number | null valor?: number | null
whatsapp_usuario?: string | null
} }
Update: { Update: {
ativo?: boolean ativo?: boolean
@ -233,12 +237,14 @@ export type Database = {
descricao?: string | null descricao?: string | null
dia_vencimento?: number dia_vencimento?: number
dias_antecedencia?: number dias_antecedencia?: number
email_usuario?: string | null
hora_aviso?: string hora_aviso?: string
id?: string id?: string
nome_conta?: string nome_conta?: string
updated_at?: string updated_at?: string
user_id?: string user_id?: string
valor?: number | null valor?: number | null
whatsapp_usuario?: string | null
} }
Relationships: [] Relationships: []
} }

View File

@ -17,11 +17,15 @@ interface ContaRecorrente {
hora_aviso: string; hora_aviso: string;
dias_antecedencia: number; dias_antecedencia: number;
ativo: boolean; ativo: boolean;
email_usuario: string | null;
whatsapp_usuario: string | null;
} }
interface AvisoData { interface AvisoData {
conta_id: string; conta_id: string;
user_id: string; user_id: string;
email_usuario: string | null;
whatsapp_usuario: string | null;
nome_conta: string; nome_conta: string;
descricao: string | null; descricao: string | null;
valor: number | null; valor: number | null;
@ -47,7 +51,7 @@ serve(async (req) => {
console.log(`Executando verificação de avisos às ${horaAtual}`) console.log(`Executando verificação de avisos às ${horaAtual}`)
// Buscar todas as contas ativas // Buscar todas as contas ativas incluindo email e whatsapp do usuário
const { data: contas, error: contasError } = await supabase const { data: contas, error: contasError } = await supabase
.from('contas_recorrentes') .from('contas_recorrentes')
.select('*') .select('*')
@ -104,6 +108,8 @@ serve(async (req) => {
const avisoData: AvisoData = { const avisoData: AvisoData = {
conta_id: conta.id, conta_id: conta.id,
user_id: conta.user_id, user_id: conta.user_id,
email_usuario: conta.email_usuario,
whatsapp_usuario: conta.whatsapp_usuario,
nome_conta: conta.nome_conta, nome_conta: conta.nome_conta,
descricao: conta.descricao, descricao: conta.descricao,
valor: conta.valor, valor: conta.valor,
@ -139,7 +145,7 @@ serve(async (req) => {
if (webhookResponse.ok) { if (webhookResponse.ok) {
avisosEnviados++ avisosEnviados++
console.log(`✅ Aviso enviado com sucesso para: ${conta.nome_conta}`) console.log(`✅ Aviso enviado com sucesso para: ${conta.nome_conta} (${conta.whatsapp_usuario})`)
} else { } else {
console.error(`❌ Erro ao enviar webhook para: ${conta.nome_conta}`) console.error(`❌ Erro ao enviar webhook para: ${conta.nome_conta}`)
} }

View File

@ -0,0 +1,16 @@
-- Adicionar colunas para email e whatsapp do usuário na tabela contas_recorrentes
ALTER TABLE public.contas_recorrentes
ADD COLUMN email_usuario TEXT,
ADD COLUMN whatsapp_usuario TEXT;
-- Atualizar os registros existentes com os dados dos usuários
UPDATE public.contas_recorrentes cr
SET
email_usuario = u.email,
whatsapp_usuario = u.whatsapp
FROM public.usuarios u
WHERE cr.user_id::text = u.id::text;
-- Adicionar políticas RLS para as novas colunas (as políticas existentes já cobrem essas colunas)
-- As políticas já existentes continuarão funcionando pois filtram por user_id