diff --git a/src/integrations/supabase/client.ts b/src/integrations/supabase/client.ts index 0dd0c17..05307d6 100644 --- a/src/integrations/supabase/client.ts +++ b/src/integrations/supabase/client.ts @@ -11,4 +11,8 @@ if (!SUPABASE_URL || !SUPABASE_PUBLISHABLE_KEY) { } // Uso: import { supabase } from "@/integrations/supabase/client"; -export const supabase = createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY); \ No newline at end of file +export const supabase = createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, { + db: { + schema: 'TS_ERP', + }, +}); \ No newline at end of file diff --git a/src/integrations/supabase/types.ts b/src/integrations/supabase/types.ts index 023e116..9e91da6 100644 --- a/src/integrations/supabase/types.ts +++ b/src/integrations/supabase/types.ts @@ -12,7 +12,7 @@ export type Database = { __InternalSupabase: { PostgrestVersion: "12.2.3 (519615d)" } - public: { + TS_ERP: { Tables: { api_keys: { Row: { @@ -287,42 +287,42 @@ export type Database = { atribuicoes: { Row: { attribution: string - client: Database["public"]["Enums"]["client_type"] + client: Database["TS_ERP"]["Enums"]["client_type"] created_at: string created_by: string - duration: Database["public"]["Enums"]["duration_type"] - frequency: Database["public"]["Enums"]["frequency_type"] + duration: Database["TS_ERP"]["Enums"]["duration_type"] + frequency: Database["TS_ERP"]["Enums"]["frequency_type"] id: string - importance: Database["public"]["Enums"]["importance_type"] - method: Database["public"]["Enums"]["method_type"] + importance: Database["TS_ERP"]["Enums"]["importance_type"] + method: Database["TS_ERP"]["Enums"]["method_type"] updated_at: string user_abbrev: string user_id: string } Insert: { attribution: string - client: Database["public"]["Enums"]["client_type"] + client: Database["TS_ERP"]["Enums"]["client_type"] created_at?: string created_by: string - duration: Database["public"]["Enums"]["duration_type"] - frequency: Database["public"]["Enums"]["frequency_type"] + duration: Database["TS_ERP"]["Enums"]["duration_type"] + frequency: Database["TS_ERP"]["Enums"]["frequency_type"] id?: string - importance: Database["public"]["Enums"]["importance_type"] - method: Database["public"]["Enums"]["method_type"] + importance: Database["TS_ERP"]["Enums"]["importance_type"] + method: Database["TS_ERP"]["Enums"]["method_type"] updated_at?: string user_abbrev?: string user_id: string } Update: { attribution?: string - client?: Database["public"]["Enums"]["client_type"] + client?: Database["TS_ERP"]["Enums"]["client_type"] created_at?: string created_by?: string - duration?: Database["public"]["Enums"]["duration_type"] - frequency?: Database["public"]["Enums"]["frequency_type"] + duration?: Database["TS_ERP"]["Enums"]["duration_type"] + frequency?: Database["TS_ERP"]["Enums"]["frequency_type"] id?: string - importance?: Database["public"]["Enums"]["importance_type"] - method?: Database["public"]["Enums"]["method_type"] + importance?: Database["TS_ERP"]["Enums"]["importance_type"] + method?: Database["TS_ERP"]["Enums"]["method_type"] updated_at?: string user_abbrev?: string user_id?: string @@ -2448,7 +2448,7 @@ export type Database = { privilege_id: string | null profile_image_url: string | null requested_at: string | null - status: Database["public"]["Enums"]["user_status"] | null + status: Database["TS_ERP"]["Enums"]["user_status"] | null updated_at: string } Insert: { @@ -2461,7 +2461,7 @@ export type Database = { privilege_id?: string | null profile_image_url?: string | null requested_at?: string | null - status?: Database["public"]["Enums"]["user_status"] | null + status?: Database["TS_ERP"]["Enums"]["user_status"] | null updated_at?: string } Update: { @@ -2474,7 +2474,7 @@ export type Database = { privilege_id?: string | null profile_image_url?: string | null requested_at?: string | null - status?: Database["public"]["Enums"]["user_status"] | null + status?: Database["TS_ERP"]["Enums"]["user_status"] | null updated_at?: string } Relationships: [ @@ -3046,9 +3046,9 @@ export type Database = { id: string is_completed: boolean | null of_number: string - priority: Database["public"]["Enums"]["task_priority"] | null + priority: Database["TS_ERP"]["Enums"]["task_priority"] | null revision: number | null - status: Database["public"]["Enums"]["task_status"] | null + status: Database["TS_ERP"]["Enums"]["task_status"] | null task_ref: string title: string updated_at: string | null @@ -3067,9 +3067,9 @@ export type Database = { id?: string is_completed?: boolean | null of_number: string - priority?: Database["public"]["Enums"]["task_priority"] | null + priority?: Database["TS_ERP"]["Enums"]["task_priority"] | null revision?: number | null - status?: Database["public"]["Enums"]["task_status"] | null + status?: Database["TS_ERP"]["Enums"]["task_status"] | null task_ref: string title: string updated_at?: string | null @@ -3088,9 +3088,9 @@ export type Database = { id?: string is_completed?: boolean | null of_number?: string - priority?: Database["public"]["Enums"]["task_priority"] | null + priority?: Database["TS_ERP"]["Enums"]["task_priority"] | null revision?: number | null - status?: Database["public"]["Enums"]["task_status"] | null + status?: Database["TS_ERP"]["Enums"]["task_status"] | null task_ref?: string title?: string updated_at?: string | null @@ -3196,21 +3196,21 @@ export type Database = { user_interface_permissions: { Row: { created_at: string - permission: Database["public"]["Enums"]["permission_level"] + permission: Database["TS_ERP"]["Enums"]["permission_level"] resource_key: string updated_at: string user_id: string } Insert: { created_at?: string - permission?: Database["public"]["Enums"]["permission_level"] + permission?: Database["TS_ERP"]["Enums"]["permission_level"] resource_key: string updated_at?: string user_id: string } Update: { created_at?: string - permission?: Database["public"]["Enums"]["permission_level"] + permission?: Database["TS_ERP"]["Enums"]["permission_level"] resource_key?: string updated_at?: string user_id?: string @@ -3229,19 +3229,19 @@ export type Database = { Row: { created_at: string id: string - role: Database["public"]["Enums"]["app_role"] + role: Database["TS_ERP"]["Enums"]["app_role"] user_id: string } Insert: { created_at?: string id?: string - role?: Database["public"]["Enums"]["app_role"] + role?: Database["TS_ERP"]["Enums"]["app_role"] user_id: string } Update: { created_at?: string id?: string - role?: Database["public"]["Enums"]["app_role"] + role?: Database["TS_ERP"]["Enums"]["app_role"] user_id?: string } Relationships: [] @@ -3461,12 +3461,12 @@ export type Database = { } get_effective_permission_for_resource: { Args: { _resource_key: string; _user_id: string } - Returns: Database["public"]["Enums"]["permission_level"] + Returns: Database["TS_ERP"]["Enums"]["permission_level"] } get_effective_permissions_for_user: { Args: { _user_id: string } Returns: { - permission: Database["public"]["Enums"]["permission_level"] + permission: Database["TS_ERP"]["Enums"]["permission_level"] resource_key: string }[] } @@ -3542,7 +3542,7 @@ export type Database = { } has_role: { Args: { - _role: Database["public"]["Enums"]["app_role"] + _role: Database["TS_ERP"]["Enums"]["app_role"] _user_id: string } Returns: boolean @@ -3790,7 +3790,7 @@ export type CompositeTypes< : never export const Constants = { - public: { + TS_ERP: { Enums: { app_role: ["admin", "user"], atribuicao_cliente: ["interno", "processo", "obra", "contrato", "geral"], diff --git a/supabase/migrations/20260331000000_migrate_to_ts_erp.sql b/supabase/migrations/20260331000000_migrate_to_ts_erp.sql new file mode 100644 index 0000000..8ea8b4e --- /dev/null +++ b/supabase/migrations/20260331000000_migrate_to_ts_erp.sql @@ -0,0 +1,103 @@ + +-- Migração: Mover de public para TS_ERP +-- Data: 2026-03-31 + +-- 1. Criar o schema TS_ERP +CREATE SCHEMA IF NOT EXISTS "TS_ERP"; + +-- 2. Garantir permissões básicas no novo schema para as roles do Supabase +GRANT USAGE ON SCHEMA "TS_ERP" TO anon, authenticated, service_role; +GRANT ALL ON SCHEMA "TS_ERP" TO postgres, service_role; +ALTER DEFAULT PRIVILEGES IN SCHEMA "TS_ERP" GRANT ALL ON TABLES TO postgres, service_role; +ALTER DEFAULT PRIVILEGES IN SCHEMA "TS_ERP" GRANT ALL ON FUNCTIONS TO postgres, service_role; +ALTER DEFAULT PRIVILEGES IN SCHEMA "TS_ERP" GRANT ALL ON SEQUENCES TO postgres, service_role; + +-- 3. Mover Tipos Customizados (Enums) primeiro (pois tabelas podem depender deles) +DO $$ +DECLARE + r RECORD; +BEGIN + FOR r IN ( + SELECT t.typname + FROM pg_type t + JOIN pg_namespace n ON n.oid = t.typnamespace + WHERE n.nspname = 'public' + AND t.typtype = 'e' -- 'e' for enum + ) + LOOP + BEGIN + EXECUTE 'ALTER TYPE public."' || r.typname || '" SET SCHEMA "TS_ERP"'; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Não foi possível mover o tipo %: %', r.typname, SQLERRM; + END; + END LOOP; +END $$; + +-- 4. Mover Tabelas +DO $$ +DECLARE + r RECORD; +BEGIN + FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') + LOOP + BEGIN + EXECUTE 'ALTER TABLE public."' || r.tablename || '" SET SCHEMA "TS_ERP"'; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Não foi possível mover a tabela %: %', r.tablename, SQLERRM; + END; + END LOOP; +END $$; + +-- 5. Mover Views +DO $$ +DECLARE + r RECORD; +BEGIN + FOR r IN (SELECT viewname FROM pg_views WHERE schemaname = 'public') + LOOP + BEGIN + EXECUTE 'ALTER VIEW public."' || r.viewname || '" SET SCHEMA "TS_ERP"'; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Não foi possível mover a view %: %', r.viewname, SQLERRM; + END; + END LOOP; +END $$; + +-- 6. Mover Sequências (que não foram movidas com as tabelas) +DO $$ +DECLARE + r RECORD; +BEGIN + FOR r IN (SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'public') + LOOP + BEGIN + EXECUTE 'ALTER SEQUENCE public."' || r.sequence_name || '" SET SCHEMA "TS_ERP"'; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Não foi possível mover a sequência %: %', r.sequence_name, SQLERRM; + END; + END LOOP; +END $$; + +-- 7. Mover Funções +-- Nota: Mover funções é complexo via SQL dinâmico devido aos argumentos. +-- Aqui listamos as funções conhecidas e as movemos manualmente ou via script mais robusto. +-- Por enquanto, vamos tentar mover as funções identificadas no information_schema. +DO $$ +DECLARE + r RECORD; + v_func_signature TEXT; +BEGIN + FOR r IN ( + SELECT ns.nspname as schema_name, p.proname as function_name, pg_get_function_identity_arguments(p.oid) as args + FROM pg_proc p + JOIN pg_namespace ns ON ns.oid = p.pronamespace + WHERE ns.nspname = 'public' + ) + LOOP + BEGIN + EXECUTE 'ALTER FUNCTION public."' || r.function_name || '"(' || r.args || ') SET SCHEMA "TS_ERP"'; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Não foi possível mover a função %(%): %', r.function_name, r.args, SQLERRM; + END; + END LOOP; +END $$; diff --git a/supabase/migrations/20260331000001_restore_logto_tables.sql b/supabase/migrations/20260331000001_restore_logto_tables.sql new file mode 100644 index 0000000..1411a77 --- /dev/null +++ b/supabase/migrations/20260331000001_restore_logto_tables.sql @@ -0,0 +1,59 @@ + +-- Migração: Restaurar tabelas do Logto para o public +-- Data: 2026-03-31 + +-- 1. Identificar e mover tabelas do Logto de volta para o schema public +-- Estas tabelas foram movidas inadvertidamente para o TS_ERP +DO $$ +DECLARE + r RECORD; + logto_tables TEXT[] := ARRAY[ + 'account_identities', + 'applications', + 'connectors', + 'hook_events', + 'logs', + 'organization_members', + 'organizations', + 'password_reset_codes', + 'rbac_permissions', + 'rbac_resource_scopes', + 'rbac_resources', + 'rbac_roles', + 'sessions', + 'sso_configs', + 'sso_connectors', + 'system_config', + 'user_identities', + 'users' -- Se o Logto estava usando public.users, esta tabela deve voltar + ]; +BEGIN + FOR r IN ( + SELECT tablename + FROM pg_tables + WHERE schemaname = 'TS_ERP' + AND tablename = ANY(logto_tables) + ) + LOOP + BEGIN + EXECUTE 'ALTER TABLE "TS_ERP"."' || r.tablename || '" SET SCHEMA public'; + RAISE NOTICE 'Restaurando tabela do Logto: %', r.tablename; + EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'Erro ao restaurar tabela %: %', r.tablename, SQLERRM; + END; + END LOOP; +END $$; + +-- 2. Restaurar permissões necessárias para o Logto no schema public +GRANT ALL ON SCHEMA public TO postgres, service_role; +GRANT USAGE ON SCHEMA public TO anon, authenticated; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO postgres, service_role; + +-- 3. Garantir que a tabela users (do Logto) tenha as permissões corretas no public +-- (Muitas vezes o Logto conecta com um usuário específico ou service_role) +DO $$ +BEGIN + IF EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'users') THEN + GRANT ALL ON TABLE public.users TO postgres, service_role; + END IF; +END $$;