Skip to content

Esquema de Banco de Dados D1 (Drizzle ORM & Migrações)

Estrutura do Banco de Dados Cloudflare D1 (SQLite)

Section titled “Estrutura do Banco de Dados Cloudflare D1 (SQLite)”

O banco de dados de borda Cloudflare D1 utiliza uma abordagem híbrida: colunas relacionais indexadas para queries rápidas e colunas *_json para estruturas dinâmicas complexas.

1. auth_accounts (Autenticação e Identidade)

Section titled “1. auth_accounts (Autenticação e Identidade)”

Armazena todas as identidades de acesso do sistema.

CREATE TABLE auth_accounts (
id TEXT PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
phone TEXT UNIQUE, -- E.164 canonicalizado (+44...)
password_hash TEXT NOT NULL,
role TEXT NOT NULL, -- 'ADMIN', 'MANAGER', 'EMPLOYEE', 'CLIENT'
reference_id TEXT NOT NULL, -- ID do client ou employee correspondente
must_change_password BOOLEAN DEFAULT FALSE,
impersonation_only BOOLEAN DEFAULT FALSE,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE clients (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
phone TEXT,
mobile_phone TEXT,
whatsapp_authorized BOOLEAN DEFAULT TRUE,
wallet_balance REAL DEFAULT 0,
payment_periodicity TEXT DEFAULT 'PER_SERVICE',
default_payment_method TEXT DEFAULT 'TRANSFER',
addresses_json TEXT, -- Array de objetos ClientAddress (Rua, Cidade, Postcode, Lat, Lng)
custom_rates_json TEXT, -- Sobregravações de preço personalizado por tipo de serviço
shopping_list_json TEXT, -- Lista de produtos de limpeza solicitados
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

3. service_requests (Atendimentos & Visitas de Limpeza)

Section titled “3. service_requests (Atendimentos & Visitas de Limpeza)”

Tabela central de operações.

CREATE TABLE service_requests (
id TEXT PRIMARY KEY,
client_id TEXT NOT NULL,
employee_id TEXT, -- Pode ser NULL se estiver aguardando alocação
service_type_id TEXT NOT NULL,
status TEXT NOT NULL, -- 'REQUESTED', 'PENDING', 'CONFIRMED', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED'
scheduled_date TEXT NOT NULL,
start_time TEXT NOT NULL,
end_time TEXT NOT NULL,
total_amount REAL NOT NULL,
address_snapshot_json TEXT NOT NULL, -- Cópia estática do endereço no momento do agendamento
checklist_json TEXT, -- Tarefas executadas durante o serviço
telemetry_json TEXT, -- Check-in/out GPS da funcionária (lat, lng, timestamp)
cancellation_reason TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE invoices (
id TEXT PRIMARY KEY,
request_id TEXT NOT NULL,
client_id TEXT NOT NULL,
amount REAL NOT NULL,
vat_amount REAL DEFAULT 0,
status TEXT NOT NULL, -- 'DRAFT', 'ISSUED', 'PAID', 'OVERDUE', 'CANCELLED'
due_date TEXT NOT NULL,
payment_method TEXT,
pdf_url TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

🛠️ Regra Obrigatória dos 3 Arquivos (Schema Drift Prevention)

Section titled “🛠️ Regra Obrigatória dos 3 Arquivos (Schema Drift Prevention)”

Quando modificar qualquer estrutura do banco de dados, você SEMPRE deve manter em sincronia:

  1. db/migrations/NNNN_*.sql (Script delta para a produção).
  2. db/schema.sql (Baseline para desenvolvimento local npm run db:init).
  3. functions/api/db/schema.ts (Mapeamento Drizzle ORM para o TypeScript).