Faça na ordem. Ao terminar os secrets, me avise que eu faço o redeploy e a gente testa cobrança + entrada de equipe. As caixinhas ficam salvas neste navegador. 💛
alter table df_config add column if not exists plano text not null default 'completo', add column if not exists plano_status text default 'ativo', add column if not exists trial_ate date;
create table if not exists academy_aulas ( id uuid primary key default gen_random_uuid(), modulo text not null default 'Aulas', titulo text not null, descricao text, video_url text, ordem int default 0, criado_em timestamptz default now() ); alter table academy_aulas enable row level security; drop policy if exists academy_aulas_read on academy_aulas; create policy academy_aulas_read on academy_aulas for select to authenticated using (true);
alter table df_config add column if not exists asaas_customer_id text, add column if not exists asaas_subscription_id text;
alter table empresas add column if not exists codigo_equipe text; create unique index if not exists idx_empresas_codigo_equipe on empresas(codigo_equipe) where codigo_equipe is not null; create table if not exists equipe_credenciais ( empresa_id uuid primary key references empresas(id) on delete cascade, email text not null, senha text not null, user_id uuid, criado_em timestamptz default now() ); alter table equipe_credenciais enable row level security; create or replace function girar_codigo_equipe() returns text language plpgsql security definer set search_path = public as $$ declare emp uuid; novo text; begin emp := empresa_atual(); if emp is null then raise exception 'sem empresa'; end if; novo := upper(substr(replace(gen_random_uuid()::text,'-',''),1,8)); update empresas set codigo_equipe = novo where id = emp; return novo; end $$; revoke all on function girar_codigo_equipe() from public; grant execute on function girar_codigo_equipe() to authenticated;
| Variável | Valor |
|---|---|
ASAAS_API_KEY | Sua chave do Asaas (Configurações → Integrações → API Key). Comece no Sandbox. |
ASAAS_ENV | sandbox (teste) ou prod (dinheiro real) |
ASAAS_WEBHOOK_TOKEN | Um código forte que você inventa (ex.: doceflow-2026-xYz9). Guarde — usa igual no passo 3. |
SUPABASE_URL | https://kqpvtckdepzymughclgr.supabase.co |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Settings → API → service_role (secreta! cola só aqui, nunca no chat). |
| URL | https://doceflow.pages.dev/api/asaas-webhook |
|---|---|
| Token | O mesmo ASAAS_WEBHOOK_TOKEN do passo 2 |
| Eventos | Cobranças (confirmada / recebida / atrasada) + Assinaturas |