Backend no Supabase com:
- Postgres (tabelas, views, triggers e RLS)
- Storage (
exportspara CSV) - Edge Functions (enviar e-mail de confirmação e exportar CSV)
<projeto-raiz>/
supabase/
migrations/
001_init.sql
002_storage_policies.sql
functions/
send-order-confirmation/
index.ts
export-order-csv/
index.ts
.env.example # modelo de variáveis
Crie o arquivo supabase/.env (ou copie de .env.example) com:
SB_URL=https://<PROJECT_REF>.supabase.co
SB_SERVICE_ROLE_KEY=<SUA_SERVICE_ROLE_KEY>
RESEND_API_KEY=<SUA_RESEND_API_KEY> # opcional, para envio de e-mail
SUPABASE_KEY=<SUA_ANON_KEY> # usar no front
Rode sempre a partir da raiz do projeto:
# 1) login
supabase login
supabase link --project-ref <PROJECT_REF>
# 2) migrar o banco hospedado
supabase db push
# 3) registrar secrets para as Edge Functions
supabase secrets set --env-file ./supabase/.env
# 4) publicar as Functions
supabase functions deploy send-order-confirmation
supabase functions deploy export-order-csv- Tabelas:
profiles,customers,products,orders,order_items - View:
v_order_details - Triggers: recalculam
orders.total_centsao inserir/alterar itens - RLS: dono vê/edita seus dados;
staff/admin
-- 1) Ver usuários
select id, email from auth.users order by created_at desc limit 20;
-- 2) Criar perfil
with u as (select id from auth.users where email = 'cliente@teste.com' limit 1)
insert into public.profiles (user_id, full_name, role)
select u.id, 'Cliente Para Teste', 'user' from u
on conflict (user_id) do nothing;
with u as (select id from auth.users where email = 'cliente@teste.com' limit 1)
insert into public.customers (user_id, name, email)
select u.id, 'Cliente Para Teste', 'cliente@teste.com' from u
on conflict (user_id) do nothing;
-- 3) Produto demonstrativo
insert into public.products (name, sku, price_cents, active)
values ('Camisa Azul', 'SKU-001', 4500, true)
on conflict (sku) do nothing;
-- 4) Criar pedido + item
with ord as (
insert into public.orders (customer_id, status)
select c.id, 'draft'
from public.customers c join auth.users u on u.id = c.user_id
where u.email = 'cliente@teste.com'
returning id
)
insert into public.order_items (order_id, product_id, quantity, unit_price_cents)
select ord.id, p.id, 2, p.price_cents
from ord join public.products p on p.sku = 'SKU-001';
-- 5) Conferir
select * from public.orders order by created_at desc limit 1;
select * from public.v_order_details order by created_at desc limit 5;