# 10.7 -  Guardando Tesouros - Storage

E aí, caçador(a) de tesouros digitais! Já aprendemos a guardar informações estruturadas — tipo texto, números e datas — nas nossas tabelas, e a controlar quem vê o quê usando Auth e RLS. Mas e aquela outra galera de arquivos que deixa a web tão interessante? Fotos de perfil, memes, vídeos, áudios, PDFs… onde será que a gente armazena esses **arquivos**?

A resposta simples é: não no banco de dados! Guardar arquivos grandes diretamente lá pode deixar tudo lento e pesado. Para isso, precisamos de um espaço próprio, um **cofre digital** para esses “tesouros” maiores e mais variados. E é aí que o **Supabase Storage** entra em ação, trazendo mais um superpoder pro nosso QG!

***

### A Missão: Um Cofre Seguro para Seus Arquivos

O **Supabase Storage** é um espaço gigantesco e seguro, feito sob medida para guardar qualquer tipo de arquivo, integrado ao seu projeto Supabase, quase como um Google Drive ou Dropbox próprio para você.

Ele serve para armazenar:

* **Imagens:** Fotos de perfil, banners, memes...
* **Vídeos:** Clipes, tutoriais...
* **Áudios:** Podcasts, músicas, gravações...
* **Documentos:** PDFs, planilhas, textos...
* E tudo mais que seu app precisar guardar!

#### Por que usar Storage e não o banco?

* **Desempenho:** Bancos de dados são melhores para dados organizados, não para arquivos grandes.
* **Escalabilidade:** Serviços de storage são projetados para armazenar e entregar milhões de arquivos de forma rápida e eficiente.
* **Custo:** Armazenar arquivos em storage costuma ser mais barato do que manter tudo no banco de dados.
* **Entrega rápida:** O Supabase Storage usa CDN para entregar arquivos rapidinho em qualquer lugar do mundo.

***

### Como Funciona o Supabase Storage (Resumo)

O Storage é organizado em **Buckets** — pense neles como pastas ou cofres dentro do seu Storage.

1. **Buckets:** Crie buckets para organizar seus arquivos, por exemplo: `avatares`, `imagens_posts`, `documentos`.
2. **Arquivos (Objetos):** Dentro do bucket ficam os arquivos, chamados de objetos, cada um com um nome único (pode ter subpastas, tipo `usuario123/foto.jpg`).
3. **Políticas de Acesso:** Como o RLS nas tabelas, o Storage tem suas políticas para controlar quem pode ler, enviar, apagar arquivos e até listar o conteúdo.
4. **API de Storage:** Você interage com o Storage usando a API do Supabase — funções para upload, download, obter URLs públicas e mais.

***

### Explorando o Storage no Painel Supabase

1. No painel do seu projeto, clique em **Storage** (ícone de caixa 🗄️).
2. Clique em **New Bucket** para criar uma nova pasta.
   * Dê um nome único (ex: `fotos-perfil`).
   * Defina se o bucket será **público** ou não (se for público, qualquer pessoa com o link pode acessar os arquivos, então cuidado!).
3. Dentro do bucket, você pode enviar arquivos direto pelo painel com "Upload file".
4. Na aba **Policies**, você configura quem pode fazer o quê (leitura, escrita, exclusão) para cada bucket, usando regras similares ao RLS.

***

### Na Prática: Guardando Fotos de Perfil

Vamos imaginar que seu app precisa guardar as fotos de perfil dos usuários.

1. Crie um bucket chamado `avatares` e deixe ele **privado**.
2. Configure as políticas:
   * Usuários autenticados podem **ler** os avatares.
   * Usuários autenticados podem **fazer upload** apenas de arquivos com nomes que comecem com seu `auth.uid()` (ex: `uid123/foto.png`).
   * Usuários podem **apagar** seus próprios arquivos (verificando que o nome do arquivo começa com o próprio UID).
3. Na sua tabela `usuarios`, crie uma coluna para guardar o caminho do arquivo do avatar, tipo `caminho_avatar`.
4. No seu código:
   * Ao enviar a foto, faça o upload com `supabase.storage.from('avatares').upload(...)`, nomeando o arquivo com o UID do usuário.
   * Salve o caminho retornado no banco na coluna `caminho_avatar`.
   * Para mostrar a imagem, pegue esse caminho e use `getPublicUrl()` ou `createSignedUrl()` para obter o link e exibir no frontend.

***

Com isso, seu QG Supabase tem um lugar especial e seguro para guardar todos os seus tesouros digitais, mantendo o banco de dados leve e rápido.
