chore: sincroniza projeto para gitea
This commit is contained in:
179
sql/setup-bucket-catalogo.sql
Normal file
179
sql/setup-bucket-catalogo.sql
Normal file
@@ -0,0 +1,179 @@
|
||||
-- =============================================
|
||||
-- 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
|
||||
*/
|
||||
Reference in New Issue
Block a user