-- ============================================= -- CONFIGURAR BUCKET 'CATALOGO' PARA FOTOS ADICIONAIS -- Execute este script no SQL Editor do Supabase -- ============================================= -- 1. CRIAR BUCKET (se não existir) INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types) VALUES ( 'catalogo', 'catalogo', true, 5242880, -- 5MB ARRAY['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'] ) ON CONFLICT (id) DO UPDATE SET public = true, file_size_limit = 5242880, allowed_mime_types = ARRAY['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif']; -- 2. POLÍTICAS DE ACESSO -- Remover políticas antigas se existirem DROP POLICY IF EXISTS "Permitir leitura pública catalogo" ON storage.objects; DROP POLICY IF EXISTS "Permitir upload autenticado catalogo" ON storage.objects; DROP POLICY IF EXISTS "Permitir update autenticado catalogo" ON storage.objects; DROP POLICY IF EXISTS "Permitir delete autenticado catalogo" ON storage.objects; -- 2.1 Permitir leitura pública CREATE POLICY "Permitir leitura pública catalogo" ON storage.objects FOR SELECT USING (bucket_id = 'catalogo'); -- 2.2 Permitir upload apenas autenticado CREATE POLICY "Permitir upload autenticado catalogo" ON storage.objects FOR INSERT WITH CHECK ( bucket_id = 'catalogo' AND (auth.role() = 'authenticated' OR auth.role() = 'service_role') ); -- 2.3 Permitir atualização apenas autenticado CREATE POLICY "Permitir update autenticado catalogo" ON storage.objects FOR UPDATE USING ( bucket_id = 'catalogo' AND (auth.role() = 'authenticated' OR auth.role() = 'service_role') ); -- 2.4 Permitir exclusão apenas autenticado CREATE POLICY "Permitir delete autenticado catalogo" ON storage.objects FOR DELETE USING ( bucket_id = 'catalogo' AND (auth.role() = 'authenticated' OR auth.role() = 'service_role') ); -- 3. VERIFICAÇÕES -- Verificar se o bucket foi criado SELECT 'Bucket criado:' as status, id, name, public, file_size_limit / 1024 / 1024 as "Tamanho máximo (MB)", allowed_mime_types as "Tipos permitidos" FROM storage.buckets WHERE id = 'catalogo'; -- Verificar políticas SELECT 'Políticas configuradas:' as status, policyname, cmd, qual FROM pg_policies WHERE tablename = 'objects' AND schemaname = 'storage' AND policyname LIKE '%catalogo%' ORDER BY policyname; -- Contar arquivos existentes (se houver) SELECT 'Arquivos no bucket:' as status, COUNT(*) as total, pg_size_pretty(SUM(COALESCE((metadata->>'size')::bigint, 0))) as "Tamanho total" FROM storage.objects WHERE bucket_id = 'catalogo'; -- ============================================= -- ESTRUTURA DE PASTAS RECOMENDADA -- ============================================= /* catalogo/ ├── produto_1/ │ ├── 1234567890-foto1.jpg │ ├── 1234567891-foto2.jpg │ └── 1234567892-foto3.jpg ├── produto_2/ │ ├── 1234567893-foto1.jpg │ └── 1234567894-foto2.jpg └── produto_3/ └── 1234567895-foto1.jpg Organização: - Pasta por produto: produto_{id} - Nome único com timestamp - Acesso público para leitura - Upload/Delete apenas autenticado */ -- ============================================= -- EXEMPLO DE USO VIA SQL -- ============================================= -- Listar fotos de um produto específico -- (Substitua 123 pelo ID do produto) /* SELECT name as "Nome do arquivo", created_at as "Data de upload", pg_size_pretty((metadata->>'size')::bigint) as "Tamanho" FROM storage.objects WHERE bucket_id = 'catalogo' AND name LIKE 'produto_123/%' ORDER BY created_at DESC; */ -- ============================================= -- LIMPEZA (USE COM CUIDADO!) -- ============================================= -- Para remover todas as fotos de um produto -- ATENÇÃO: Esta operação é irreversível! /* DELETE FROM storage.objects WHERE bucket_id = 'catalogo' AND name LIKE 'produto_123/%'; */ -- Para remover o bucket completo (CUIDADO!) /* DELETE FROM storage.objects WHERE bucket_id = 'catalogo'; DELETE FROM storage.buckets WHERE id = 'catalogo'; */ -- ============================================= -- INSTRUÇÕES FINAIS -- ============================================= /* ✅ BUCKET 'CATALOGO' CONFIGURADO COM SUCESSO! Próximos passos: 1. ✅ Execute este script no SQL Editor do Supabase 2. ✅ Verifique as mensagens de verificação acima 3. ✅ Acesse o painel admin: Site / Catalogo 4. ✅ Clique em "Fotos" em qualquer produto 5. ✅ Faça upload de uma foto de teste 6. ✅ Verifique no Supabase Storage > catalogo O bucket está pronto para uso! Características: - 📁 Organização por produto - 🔒 Segurança com RLS - 🌐 Acesso público para leitura - 📸 Suporta: JPEG, PNG, WebP, GIF - 📦 Limite: 5MB por arquivo - 🚀 Integrado com site de catálogo Para adicionar fotos via código: - Frontend: Componente SiteCatalogo - Backend: POST /api/produtos/:id/fotos-catalogo - Site: Carrega automaticamente em script.js */