Fonte Única da Verdade (SSOT)
O princípio da Fonte Única da Verdade (SSOT - Single Source of Truth) garante que cada estrutura de dados, esquema e regra de negócio principal seja definido em exatamente um local autoritativo, eliminando a duplicação e problemas de sincronização entre diferentes aplicações no monorepo.
1. Conceito Arquitetural e Visão Geral
A Fonte Única da Verdade (SSOT) é um paradigma de engenharia fundamental que estabelece que todos os componentes do sistema devem referenciar uma definição única e centralizada para modelos de dados, contratos de validação e constantes. Esse design evita estados de "cérebro dividido" (split-brain) onde pacotes independentes (como backends de API, filas de mensagens e interfaces de usuário) divergem em nomes de propriedades, tipos de dados ou limites de esquemas.
Ao centralizar os esquemas principais, nós:
- Garantimos segurança de tipo (type safety) completa do banco de dados até a UI.
- Permitimos atualizações instantâneas de propriedades (props) e esquemas em todas as aplicações após modificações.
- Reduzimos a duplicação de código e a sobrecarga de ferramentas (tooling).
2. Utilização Específica no Projeto
No tupynambalucas.dev, o princípio SSOT é implementado nativamente por meio de nossa arquitetura monorepo:
A. Bibliotecas Core Centralizadas
Os workspaces @tupynambalucas-hub/core e @tupynambalucas-hub/core servem como o SSOT absoluto para seus respectivos contextos delimitados. Qualquer esquema, interface ou tipo compartilhado por mais de uma aplicação (como a API do backend e a SPA web do frontend) deve ser declarado aqui primeiro, seguindo nossa diretriz de Design Direcionado ao Core (Core First Design).
B. Compartilhamento de Contratos e Tipos
Aplicações downstream como @tupynambalucas-hub/api (Fastify) e @tupynambalucas-hub/web (React SPA) não mantêm interfaces de objetos de transferência de dados (DTO) ou modelos de banco de dados duplicados. Em vez disso, importam diretamente tipos, interfaces e classes do pacote core compartilhado:
// Core package definition
// instance/packages/core/src/domains/cycle/cycle.types.ts
export interface ICycle {
id: string;
name: string;
startDate: Date;
endDate: Date;
status: 'active' | 'closed' | 'draft';
}
// Consumed directly in downstream API
// instance/apps/api/src/domains/cycle/cycle.service.ts
import type { ICycle } from '@tupynambalucas-hub/core';
C. Consistência na Validação de Esquemas
Esquemas de validação compartilhados são declarados uma única vez usando Zod dentro das bibliotecas core. A API do backend consome esses esquemas em seus controllers para validar payloads HTTP recebidos, enquanto a aplicação web frontend usa os mesmos esquemas para validação de formulários no lado do cliente.
A modificação de um campo exige a atualização de apenas um único arquivo no workspace core, o que se propaga automaticamente por todo o pipeline de build durante a verificação em tempo de compilação, eliminando a sincronização manual de contratos de API.