🚀 Auto-deploy: Schema Migrado para TS_ERP e Código Atualizado
This commit is contained in:
@@ -11,4 +11,8 @@ if (!SUPABASE_URL || !SUPABASE_PUBLISHABLE_KEY) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Uso: import { supabase } from "@/integrations/supabase/client";
|
// Uso: import { supabase } from "@/integrations/supabase/client";
|
||||||
export const supabase = createClient<Database>(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY);
|
export const supabase = createClient<Database>(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {
|
||||||
|
db: {
|
||||||
|
schema: 'TS_ERP',
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -12,7 +12,7 @@ export type Database = {
|
|||||||
__InternalSupabase: {
|
__InternalSupabase: {
|
||||||
PostgrestVersion: "12.2.3 (519615d)"
|
PostgrestVersion: "12.2.3 (519615d)"
|
||||||
}
|
}
|
||||||
public: {
|
TS_ERP: {
|
||||||
Tables: {
|
Tables: {
|
||||||
api_keys: {
|
api_keys: {
|
||||||
Row: {
|
Row: {
|
||||||
@@ -287,42 +287,42 @@ export type Database = {
|
|||||||
atribuicoes: {
|
atribuicoes: {
|
||||||
Row: {
|
Row: {
|
||||||
attribution: string
|
attribution: string
|
||||||
client: Database["public"]["Enums"]["client_type"]
|
client: Database["TS_ERP"]["Enums"]["client_type"]
|
||||||
created_at: string
|
created_at: string
|
||||||
created_by: string
|
created_by: string
|
||||||
duration: Database["public"]["Enums"]["duration_type"]
|
duration: Database["TS_ERP"]["Enums"]["duration_type"]
|
||||||
frequency: Database["public"]["Enums"]["frequency_type"]
|
frequency: Database["TS_ERP"]["Enums"]["frequency_type"]
|
||||||
id: string
|
id: string
|
||||||
importance: Database["public"]["Enums"]["importance_type"]
|
importance: Database["TS_ERP"]["Enums"]["importance_type"]
|
||||||
method: Database["public"]["Enums"]["method_type"]
|
method: Database["TS_ERP"]["Enums"]["method_type"]
|
||||||
updated_at: string
|
updated_at: string
|
||||||
user_abbrev: string
|
user_abbrev: string
|
||||||
user_id: string
|
user_id: string
|
||||||
}
|
}
|
||||||
Insert: {
|
Insert: {
|
||||||
attribution: string
|
attribution: string
|
||||||
client: Database["public"]["Enums"]["client_type"]
|
client: Database["TS_ERP"]["Enums"]["client_type"]
|
||||||
created_at?: string
|
created_at?: string
|
||||||
created_by: string
|
created_by: string
|
||||||
duration: Database["public"]["Enums"]["duration_type"]
|
duration: Database["TS_ERP"]["Enums"]["duration_type"]
|
||||||
frequency: Database["public"]["Enums"]["frequency_type"]
|
frequency: Database["TS_ERP"]["Enums"]["frequency_type"]
|
||||||
id?: string
|
id?: string
|
||||||
importance: Database["public"]["Enums"]["importance_type"]
|
importance: Database["TS_ERP"]["Enums"]["importance_type"]
|
||||||
method: Database["public"]["Enums"]["method_type"]
|
method: Database["TS_ERP"]["Enums"]["method_type"]
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
user_abbrev?: string
|
user_abbrev?: string
|
||||||
user_id: string
|
user_id: string
|
||||||
}
|
}
|
||||||
Update: {
|
Update: {
|
||||||
attribution?: string
|
attribution?: string
|
||||||
client?: Database["public"]["Enums"]["client_type"]
|
client?: Database["TS_ERP"]["Enums"]["client_type"]
|
||||||
created_at?: string
|
created_at?: string
|
||||||
created_by?: string
|
created_by?: string
|
||||||
duration?: Database["public"]["Enums"]["duration_type"]
|
duration?: Database["TS_ERP"]["Enums"]["duration_type"]
|
||||||
frequency?: Database["public"]["Enums"]["frequency_type"]
|
frequency?: Database["TS_ERP"]["Enums"]["frequency_type"]
|
||||||
id?: string
|
id?: string
|
||||||
importance?: Database["public"]["Enums"]["importance_type"]
|
importance?: Database["TS_ERP"]["Enums"]["importance_type"]
|
||||||
method?: Database["public"]["Enums"]["method_type"]
|
method?: Database["TS_ERP"]["Enums"]["method_type"]
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
user_abbrev?: string
|
user_abbrev?: string
|
||||||
user_id?: string
|
user_id?: string
|
||||||
@@ -2448,7 +2448,7 @@ export type Database = {
|
|||||||
privilege_id: string | null
|
privilege_id: string | null
|
||||||
profile_image_url: string | null
|
profile_image_url: string | null
|
||||||
requested_at: string | null
|
requested_at: string | null
|
||||||
status: Database["public"]["Enums"]["user_status"] | null
|
status: Database["TS_ERP"]["Enums"]["user_status"] | null
|
||||||
updated_at: string
|
updated_at: string
|
||||||
}
|
}
|
||||||
Insert: {
|
Insert: {
|
||||||
@@ -2461,7 +2461,7 @@ export type Database = {
|
|||||||
privilege_id?: string | null
|
privilege_id?: string | null
|
||||||
profile_image_url?: string | null
|
profile_image_url?: string | null
|
||||||
requested_at?: string | null
|
requested_at?: string | null
|
||||||
status?: Database["public"]["Enums"]["user_status"] | null
|
status?: Database["TS_ERP"]["Enums"]["user_status"] | null
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
}
|
}
|
||||||
Update: {
|
Update: {
|
||||||
@@ -2474,7 +2474,7 @@ export type Database = {
|
|||||||
privilege_id?: string | null
|
privilege_id?: string | null
|
||||||
profile_image_url?: string | null
|
profile_image_url?: string | null
|
||||||
requested_at?: string | null
|
requested_at?: string | null
|
||||||
status?: Database["public"]["Enums"]["user_status"] | null
|
status?: Database["TS_ERP"]["Enums"]["user_status"] | null
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
}
|
}
|
||||||
Relationships: [
|
Relationships: [
|
||||||
@@ -3046,9 +3046,9 @@ export type Database = {
|
|||||||
id: string
|
id: string
|
||||||
is_completed: boolean | null
|
is_completed: boolean | null
|
||||||
of_number: string
|
of_number: string
|
||||||
priority: Database["public"]["Enums"]["task_priority"] | null
|
priority: Database["TS_ERP"]["Enums"]["task_priority"] | null
|
||||||
revision: number | null
|
revision: number | null
|
||||||
status: Database["public"]["Enums"]["task_status"] | null
|
status: Database["TS_ERP"]["Enums"]["task_status"] | null
|
||||||
task_ref: string
|
task_ref: string
|
||||||
title: string
|
title: string
|
||||||
updated_at: string | null
|
updated_at: string | null
|
||||||
@@ -3067,9 +3067,9 @@ export type Database = {
|
|||||||
id?: string
|
id?: string
|
||||||
is_completed?: boolean | null
|
is_completed?: boolean | null
|
||||||
of_number: string
|
of_number: string
|
||||||
priority?: Database["public"]["Enums"]["task_priority"] | null
|
priority?: Database["TS_ERP"]["Enums"]["task_priority"] | null
|
||||||
revision?: number | null
|
revision?: number | null
|
||||||
status?: Database["public"]["Enums"]["task_status"] | null
|
status?: Database["TS_ERP"]["Enums"]["task_status"] | null
|
||||||
task_ref: string
|
task_ref: string
|
||||||
title: string
|
title: string
|
||||||
updated_at?: string | null
|
updated_at?: string | null
|
||||||
@@ -3088,9 +3088,9 @@ export type Database = {
|
|||||||
id?: string
|
id?: string
|
||||||
is_completed?: boolean | null
|
is_completed?: boolean | null
|
||||||
of_number?: string
|
of_number?: string
|
||||||
priority?: Database["public"]["Enums"]["task_priority"] | null
|
priority?: Database["TS_ERP"]["Enums"]["task_priority"] | null
|
||||||
revision?: number | null
|
revision?: number | null
|
||||||
status?: Database["public"]["Enums"]["task_status"] | null
|
status?: Database["TS_ERP"]["Enums"]["task_status"] | null
|
||||||
task_ref?: string
|
task_ref?: string
|
||||||
title?: string
|
title?: string
|
||||||
updated_at?: string | null
|
updated_at?: string | null
|
||||||
@@ -3196,21 +3196,21 @@ export type Database = {
|
|||||||
user_interface_permissions: {
|
user_interface_permissions: {
|
||||||
Row: {
|
Row: {
|
||||||
created_at: string
|
created_at: string
|
||||||
permission: Database["public"]["Enums"]["permission_level"]
|
permission: Database["TS_ERP"]["Enums"]["permission_level"]
|
||||||
resource_key: string
|
resource_key: string
|
||||||
updated_at: string
|
updated_at: string
|
||||||
user_id: string
|
user_id: string
|
||||||
}
|
}
|
||||||
Insert: {
|
Insert: {
|
||||||
created_at?: string
|
created_at?: string
|
||||||
permission?: Database["public"]["Enums"]["permission_level"]
|
permission?: Database["TS_ERP"]["Enums"]["permission_level"]
|
||||||
resource_key: string
|
resource_key: string
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
user_id: string
|
user_id: string
|
||||||
}
|
}
|
||||||
Update: {
|
Update: {
|
||||||
created_at?: string
|
created_at?: string
|
||||||
permission?: Database["public"]["Enums"]["permission_level"]
|
permission?: Database["TS_ERP"]["Enums"]["permission_level"]
|
||||||
resource_key?: string
|
resource_key?: string
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
user_id?: string
|
user_id?: string
|
||||||
@@ -3229,19 +3229,19 @@ export type Database = {
|
|||||||
Row: {
|
Row: {
|
||||||
created_at: string
|
created_at: string
|
||||||
id: string
|
id: string
|
||||||
role: Database["public"]["Enums"]["app_role"]
|
role: Database["TS_ERP"]["Enums"]["app_role"]
|
||||||
user_id: string
|
user_id: string
|
||||||
}
|
}
|
||||||
Insert: {
|
Insert: {
|
||||||
created_at?: string
|
created_at?: string
|
||||||
id?: string
|
id?: string
|
||||||
role?: Database["public"]["Enums"]["app_role"]
|
role?: Database["TS_ERP"]["Enums"]["app_role"]
|
||||||
user_id: string
|
user_id: string
|
||||||
}
|
}
|
||||||
Update: {
|
Update: {
|
||||||
created_at?: string
|
created_at?: string
|
||||||
id?: string
|
id?: string
|
||||||
role?: Database["public"]["Enums"]["app_role"]
|
role?: Database["TS_ERP"]["Enums"]["app_role"]
|
||||||
user_id?: string
|
user_id?: string
|
||||||
}
|
}
|
||||||
Relationships: []
|
Relationships: []
|
||||||
@@ -3461,12 +3461,12 @@ export type Database = {
|
|||||||
}
|
}
|
||||||
get_effective_permission_for_resource: {
|
get_effective_permission_for_resource: {
|
||||||
Args: { _resource_key: string; _user_id: string }
|
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: {
|
get_effective_permissions_for_user: {
|
||||||
Args: { _user_id: string }
|
Args: { _user_id: string }
|
||||||
Returns: {
|
Returns: {
|
||||||
permission: Database["public"]["Enums"]["permission_level"]
|
permission: Database["TS_ERP"]["Enums"]["permission_level"]
|
||||||
resource_key: string
|
resource_key: string
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
@@ -3542,7 +3542,7 @@ export type Database = {
|
|||||||
}
|
}
|
||||||
has_role: {
|
has_role: {
|
||||||
Args: {
|
Args: {
|
||||||
_role: Database["public"]["Enums"]["app_role"]
|
_role: Database["TS_ERP"]["Enums"]["app_role"]
|
||||||
_user_id: string
|
_user_id: string
|
||||||
}
|
}
|
||||||
Returns: boolean
|
Returns: boolean
|
||||||
@@ -3790,7 +3790,7 @@ export type CompositeTypes<
|
|||||||
: never
|
: never
|
||||||
|
|
||||||
export const Constants = {
|
export const Constants = {
|
||||||
public: {
|
TS_ERP: {
|
||||||
Enums: {
|
Enums: {
|
||||||
app_role: ["admin", "user"],
|
app_role: ["admin", "user"],
|
||||||
atribuicao_cliente: ["interno", "processo", "obra", "contrato", "geral"],
|
atribuicao_cliente: ["interno", "processo", "obra", "contrato", "geral"],
|
||||||
|
|||||||
103
supabase/migrations/20260331000000_migrate_to_ts_erp.sql
Normal file
103
supabase/migrations/20260331000000_migrate_to_ts_erp.sql
Normal file
@@ -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 $$;
|
||||||
59
supabase/migrations/20260331000001_restore_logto_tables.sql
Normal file
59
supabase/migrations/20260331000001_restore_logto_tables.sql
Normal file
@@ -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 $$;
|
||||||
Reference in New Issue
Block a user