112 lines
3.6 KiB
PL/PgSQL
112 lines
3.6 KiB
PL/PgSQL
-- =============================================
|
|
-- 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;
|