180 lines
4.9 KiB
SQL
180 lines
4.9 KiB
SQL
-- =============================================
|
|
-- 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
|
|
*/
|