B
BridgePayDocs v1

BridgePay — 03. Esquema do Banco de Dados

Este documento mapeia o modelo de dados (PostgreSQL no Supabase) e as regras de controle de acesso de segurança baseadas em RLS (Row Level Security).

---

1. Regra de Ouro da Segurança

Row Level Security (RLS) ativo em todas as tabelas!

Nenhum dado é visível por padrão na rede pública.

  • Vendedor / Usuário Comum: Pode criar, ler, atualizar ou excluir apenas os registros onde user_id ou owner_id seja igual a auth.uid().
  • Administradores (role = 'admin' ou 'super_admin'): Possuem bypass completo e podem visualizar ou modificar todos os registros de qualquer tabela.
  • ---

    2. Tabelas Principais

    profiles (Perfis de Usuários)

    Armazena informações adicionais dos usuários registrados no Supabase Auth.

  • id (uuid, PK, references auth.users): Identificador único.
  • nome (text): Nome completo do usuário.
  • whatsapp (text, unique): Número de telefone para contato (+258).
  • username (text, unique): Nome de usuário para login híbrido.
  • role (text): Cargo do perfil ('user', 'admin', 'super_admin'). Default: 'user'.
  • saldo_mzn (numeric): Saldo disponível para saque na plataforma. Default: 0.00.
  • is_blocked (boolean): Flag para bloquear acesso à conta. Default: false.
  • created_at (timestamptz): Data de criação.
  • saas_plans (Planos SaaS da Plataforma)

    Armazena os limites e valores dos planos de assinatura cobrados pela BridgePay.

  • id (uuid, PK): Identificador único.
  • name (text): Nome do plano (ex: "Plano Básico", "Plano Ilimitado").
  • price_mzn (numeric): Preço do plano em meticais (ex: 149.00, 399.00).
  • features (jsonb): Limites do plano (número de produtos, arquivos, volume de tráfego, etc.).
  • created_at (timestamptz): Data de criação.
  • tenant_subscriptions (Assinaturas SaaS Ativas)

    Vincula os usuários aos planos SaaS ativos na BridgePay.

  • id (uuid, PK): Identificador único.
  • user_id (uuid, references profiles.id): Vendedor assinante.
  • plan_id (uuid, references saas_plans.id): Plano contratado.
  • status (text): Estado da assinatura ('active', 'past_due', 'canceled').
  • expires_at (timestamptz): Data de expiração da assinatura.
  • gateways_config (Configurações de Gateways)

    Configurações de credenciais dos gateways para o vendedor (ou para a plataforma padrão).

  • id (uuid, PK): Identificador único.
  • user_id (uuid, references profiles.id, nullable): Vendedor dono da configuração (se null, é gateway padrão).
  • provider (text): Gateway provedor ('debitipay', 'paysuite', 'e2payment').
  • api_key_encrypted (text): Credenciais criptografadas em AES-256-GCM.
  • use_bridgepay_gateway (boolean): Se true, o vendedor usa a taxa padrão da BridgePay e a conta centralizada.
  • is_active_custom (boolean): Se true, usa as chaves próprias configuradas.
  • products (Produtos dos Vendedores)

    Produtos digitais cadastrados por vendedores para venda.

  • id (uuid, PK): Identificador único.
  • user_id (uuid, references profiles.id): Dono do produto.
  • title (text): Nome do produto.
  • description (text, nullable): Descrição detalhada.
  • price (numeric): Preço de venda (MZN).
  • pdf_url_r2 (text, nullable): Caminho do arquivo PDF hospedado no Cloudflare R2.
  • video_url (text, nullable): Link do vídeo associado à área de membros.
  • created_at (timestamptz).
  • subscriptions (Clientes / Compras Efetuadas)

    Vendas e acessos concedidos a compradores finais de produtos.

  • id (uuid, PK): Identificador único.
  • user_id (uuid, references profiles.id): Vendedor do produto.
  • product_id (uuid, references products.id): Produto comprado.
  • buyer_whatsapp (text): WhatsApp do comprador (onde o bot envia o acesso).
  • buyer_email (text, nullable): E-mail do comprador.
  • status (text): Estado da assinatura do comprador ('active', 'expired').
  • created_at (timestamptz).
  • bot_sessions (Sessões do WhatsApp Bot)

    Tabela monitorada em tempo real para controle remoto do bot na VPS.

  • id (text, PK): Identificador da sessão (geralmente 'default').
  • status (text): Status da conexão ('DISCONNECTED', 'CONNECTING', 'QR_READY', 'CONNECTED').
  • qr_code_base64 (text, nullable): Código QR em string Base64.
  • pairing_code (text, nullable): Código de pareamento de 8 caracteres.
  • updated_at (timestamptz).
  • withdrawals (Solicitações de Saque)

    Registro de saques solicitados pelos vendedores.

  • id (uuid, PK): Identificador único.
  • user_id (uuid, references profiles.id): Vendedor solicitante.
  • amount (numeric): Valor solicitado (MZN).
  • payment_method (text): Canal para saque (ex: 'mpesa', 'emola').
  • status (text): Status da transação ('pending', 'approved', 'failed').
  • created_at (timestamptz).