From 13261836a040ae456b3336c6f8b9cd9bddf1fe88 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 20:40:51 +0000 Subject: [PATCH] Fix manual signup flow Adjusted the manual signup flow to prevent users from being redirected to the profile completion page after logging in. This resolves an issue where users who registered manually were repeatedly prompted for information they had already provided. --- src/integrations/supabase/types.ts | 290 ++++++++++++++++-- src/pages/CompleteProfile.tsx | 135 ++++---- ...3_b1df186f-cebb-426e-a2b0-ba3c4695c175.sql | 41 +++ 3 files changed, 374 insertions(+), 92 deletions(-) create mode 100644 supabase/migrations/20250902203953_b1df186f-cebb-426e-a2b0-ba3c4695c175.sql diff --git a/src/integrations/supabase/types.ts b/src/integrations/supabase/types.ts index 40b9010..55b5d5c 100644 --- a/src/integrations/supabase/types.ts +++ b/src/integrations/supabase/types.ts @@ -7,6 +7,11 @@ export type Json = | Json[] export type Database = { + // Allows to automatically instantiate createClient with right options + // instead of createClient(URL, KEY) + __InternalSupabase: { + PostgrestVersion: "12.2.3 (519615d)" + } public: { Tables: { "1001_amore_conselheira": { @@ -561,6 +566,195 @@ export type Database = { } Relationships: [] } + n8n_chat_dolceamore: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_dolceamoree: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_histories: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_histories_primeade: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_primevl: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_qnn01: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_recanto: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_chat_samambaia: { + Row: { + id: number + message: Json + session_id: string + } + Insert: { + id?: number + message: Json + session_id: string + } + Update: { + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } + n8n_fila_mensagens: { + Row: { + id: number + id_mensagem: string + mensagem: string + telefone: string + timestamp: string + } + Insert: { + id?: number + id_mensagem: string + mensagem: string + telefone: string + timestamp: string + } + Update: { + id?: number + id_mensagem?: string + mensagem?: string + telefone?: string + timestamp?: string + } + Relationships: [] + } + n8n_historico_mensagens: { + Row: { + created_at: string + id: number + message: Json + session_id: string + } + Insert: { + created_at?: string + id?: number + message: Json + session_id: string + } + Update: { + created_at?: string + id?: number + message?: Json + session_id?: string + } + Relationships: [] + } pagamentos_mercadopago: { Row: { created_at: string @@ -647,6 +841,24 @@ export type Database = { }, ] } + profiles: { + Row: { + document_number: string | null + full_name: string | null + id: string + } + Insert: { + document_number?: string | null + full_name?: string | null + id: string + } + Update: { + document_number?: string | null + full_name?: string | null + id?: string + } + Relationships: [] + } status_pagamento_mensal: { Row: { ano: number @@ -792,10 +1004,10 @@ export type Database = { Returns: unknown } conselheiraamore: { - Args: { query_embedding: string; match_count?: number; filter?: Json } + Args: { filter?: Json; match_count?: number; query_embedding: string } Returns: { - id: number content: string + id: number metadata: Json similarity: number }[] @@ -854,11 +1066,11 @@ export type Database = { } registrar_usuario: { Args: - | { nome: string; empresa: string; email: string; senha: string } + | { email: string; empresa: string; nome: string; senha: string } | { - nome: string - empresa: string email: string + empresa: string + nome: string senha: string whatsapp: string } @@ -910,21 +1122,25 @@ export type Database = { } } -type DefaultSchema = Database[Extract] +type DatabaseWithoutInternals = Omit + +type DefaultSchema = DatabaseWithoutInternals[Extract] export type Tables< DefaultSchemaTableNameOrOptions extends | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) - | { schema: keyof Database }, + | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof Database + schema: keyof DatabaseWithoutInternals } - ? keyof (Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - Database[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) : never = never, -> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database } - ? (Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - Database[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { Row: infer R } ? R @@ -942,14 +1158,16 @@ export type Tables< export type TablesInsert< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] - | { schema: keyof Database }, + | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof Database + schema: keyof DatabaseWithoutInternals } - ? keyof Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] : never = never, -> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database } - ? Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { Insert: infer I } ? I @@ -965,14 +1183,16 @@ export type TablesInsert< export type TablesUpdate< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] - | { schema: keyof Database }, + | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof Database + schema: keyof DatabaseWithoutInternals } - ? keyof Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] : never = never, -> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database } - ? Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { Update: infer U } ? U @@ -988,14 +1208,16 @@ export type TablesUpdate< export type Enums< DefaultSchemaEnumNameOrOptions extends | keyof DefaultSchema["Enums"] - | { schema: keyof Database }, + | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { - schema: keyof Database + schema: keyof DatabaseWithoutInternals } - ? keyof Database[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] : never = never, -> = DefaultSchemaEnumNameOrOptions extends { schema: keyof Database } - ? Database[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] +> = DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] : never @@ -1003,14 +1225,16 @@ export type Enums< export type CompositeTypes< PublicCompositeTypeNameOrOptions extends | keyof DefaultSchema["CompositeTypes"] - | { schema: keyof Database }, + | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { - schema: keyof Database + schema: keyof DatabaseWithoutInternals } - ? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] : never = never, -> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database } - ? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] +> = PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] : never diff --git a/src/pages/CompleteProfile.tsx b/src/pages/CompleteProfile.tsx index 4d7f851..2c24292 100644 --- a/src/pages/CompleteProfile.tsx +++ b/src/pages/CompleteProfile.tsx @@ -131,70 +131,87 @@ const CompleteProfile = () => { }; return ( -
- - - Complete seu Perfil - - Para continuar, precisamos de algumas informações obrigatórias para configurar sua conta - - - -
-
- - setNome(e.target.value)} - required - disabled={isLoading} - /> -
+
+
+ + + + Complete seu Perfil + + + Para continuar, precisamos de algumas informações obrigatórias para configurar sua conta + + + + +
+ + setNome(e.target.value)} + required + disabled={isLoading} + className="glass-input border-white/20 bg-white/50 backdrop-blur-sm focus:border-primary/50 focus:ring-primary/20" + /> +
-
- - setEmpresa(e.target.value)} - disabled={isLoading} - /> -
+
+ + setEmpresa(e.target.value)} + disabled={isLoading} + className="glass-input border-white/20 bg-white/50 backdrop-blur-sm focus:border-primary/50 focus:ring-primary/20" + /> +
-
- - handleWhatsappChange(e.target.value)} - required +
+ + handleWhatsappChange(e.target.value)} + required + disabled={isLoading} + className="glass-input border-white/20 bg-white/50 backdrop-blur-sm focus:border-primary/50 focus:ring-primary/20" + /> +

+ Necessário para integração com WhatsApp e notificações +

+
+ + + + +
+

+ Por que estes dados?
+ Nome e WhatsApp são necessários para configurar automaticamente seu workspace e integrações personalizadas.

- - - - -
-

- Por que estes dados?
- Nome e WhatsApp são necessários para configurar automaticamente seu workspace e integrações personalizadas. -

-
- - + + +
); }; diff --git a/supabase/migrations/20250902203953_b1df186f-cebb-426e-a2b0-ba3c4695c175.sql b/supabase/migrations/20250902203953_b1df186f-cebb-426e-a2b0-ba3c4695c175.sql new file mode 100644 index 0000000..f01dc86 --- /dev/null +++ b/supabase/migrations/20250902203953_b1df186f-cebb-426e-a2b0-ba3c4695c175.sql @@ -0,0 +1,41 @@ +-- Criar trigger para automaticamente criar usuário na tabela usuarios quando se cadastra manualmente +CREATE OR REPLACE FUNCTION public.handle_manual_user_signup() +RETURNS trigger +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path = public +AS $$ +BEGIN + -- Verificar se o usuário tem dados completos no raw_user_meta_data (cadastro manual) + IF NEW.raw_user_meta_data IS NOT NULL AND + NEW.raw_user_meta_data->>'nome' IS NOT NULL AND + NEW.raw_user_meta_data->>'whatsapp' IS NOT NULL AND + NEW.email IS NOT NULL THEN + + -- Inserir na tabela usuarios + INSERT INTO public.usuarios (id, email, nome, empresa, whatsapp) + VALUES ( + NEW.id, + NEW.email, + NEW.raw_user_meta_data->>'nome', + COALESCE(NEW.raw_user_meta_data->>'empresa', ''), + NEW.raw_user_meta_data->>'whatsapp' + ) + ON CONFLICT (id) DO UPDATE SET + nome = EXCLUDED.nome, + empresa = EXCLUDED.empresa, + whatsapp = EXCLUDED.whatsapp, + email = EXCLUDED.email; + + RETURN NEW; + END IF; + + RETURN NEW; +END; +$$; + +-- Criar trigger que será executado quando um usuário é inserido na tabela auth.users +DROP TRIGGER IF EXISTS on_auth_user_created_manual ON auth.users; +CREATE TRIGGER on_auth_user_created_manual + AFTER INSERT ON auth.users + FOR EACH ROW EXECUTE FUNCTION public.handle_manual_user_signup(); \ No newline at end of file