-- ============================================= -- CONFIGURAÇÃO DE STORAGE (BUCKETS) NO SUPABASE -- ============================================= -- Criar bucket para imagens de produtos INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types) VALUES ( 'produtos', 'produtos', true, 5242880, -- 5MB ARRAY['image/jpeg', 'image/png', 'image/webp', 'image/gif'] ) ON CONFLICT (id) DO NOTHING; -- Criar bucket para imagens do catálogo (otimizadas) INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types) VALUES ( 'catalogo', 'catalogo', true, 3145728, -- 3MB ARRAY['image/jpeg', 'image/png', 'image/webp'] ) ON CONFLICT (id) DO NOTHING; -- ============================================= -- POLÍTICAS DE ACESSO AOS BUCKETS -- ============================================= -- Política para permitir upload de imagens de produtos (apenas usuários autenticados) CREATE POLICY "Permitir upload de imagens de produtos" ON storage.objects FOR INSERT WITH CHECK ( bucket_id = 'produtos' AND auth.role() = 'authenticated' ); -- Política para permitir leitura pública de imagens de produtos CREATE POLICY "Permitir leitura pública de imagens de produtos" ON storage.objects FOR SELECT USING (bucket_id = 'produtos'); -- Política para permitir atualização de imagens de produtos CREATE POLICY "Permitir atualização de imagens de produtos" ON storage.objects FOR UPDATE WITH CHECK ( bucket_id = 'produtos' AND auth.role() = 'authenticated' ); -- Política para permitir exclusão de imagens de produtos CREATE POLICY "Permitir exclusão de imagens de produtos" ON storage.objects FOR DELETE USING ( bucket_id = 'produtos' AND auth.role() = 'authenticated' ); -- Política para permitir upload de imagens do catálogo CREATE POLICY "Permitir upload de imagens do catálogo" ON storage.objects FOR INSERT WITH CHECK ( bucket_id = 'catalogo' AND auth.role() = 'authenticated' ); -- Política para permitir leitura pública de imagens do catálogo CREATE POLICY "Permitir leitura pública de imagens do catálogo" ON storage.objects FOR SELECT USING (bucket_id = 'catalogo'); -- Política para permitir atualização de imagens do catálogo CREATE POLICY "Permitir atualização de imagens do catálogo" ON storage.objects FOR UPDATE WITH CHECK ( bucket_id = 'catalogo' AND auth.role() = 'authenticated' ); -- Política para permitir exclusão de imagens do catálogo CREATE POLICY "Permitir exclusão de imagens do catálogo" ON storage.objects FOR DELETE USING ( bucket_id = 'catalogo' AND auth.role() = 'authenticated' ); -- ============================================= -- FUNÇÕES AUXILIARES PARA STORAGE -- ============================================= -- Função para gerar URL pública de uma imagem CREATE OR REPLACE FUNCTION get_public_url(bucket_name text, file_path text) RETURNS text AS $$ BEGIN RETURN 'https://ydhzylfnpqlxnzfcclla.supabase.co/storage/v1/object/public/' || bucket_name || '/' || file_path; END; $$ LANGUAGE plpgsql; -- Função para otimizar nome de arquivo CREATE OR REPLACE FUNCTION generate_file_name(original_name text) RETURNS text AS $$ DECLARE extension text; clean_name text; timestamp_str text; BEGIN -- Extrair extensão extension := lower(substring(original_name from '\.([^.]*)$')); -- Limpar nome (remover caracteres especiais) clean_name := regexp_replace(lower(original_name), '[^a-z0-9.]', '_', 'g'); -- Gerar timestamp timestamp_str := to_char(now(), 'YYYYMMDD_HH24MISS'); -- Retornar nome otimizado RETURN timestamp_str || '_' || clean_name; END; $$ LANGUAGE plpgsql;