chore: sincroniza projeto para gitea

This commit is contained in:
Tiago
2025-11-29 21:31:52 -03:00
parent 33d8645eb4
commit 7e7a0f8867
129 changed files with 24999 additions and 6757 deletions

111
sql/supabase-storage.sql Normal file
View File

@@ -0,0 +1,111 @@
-- =============================================
-- 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;