Event Sourcing e CQRS em Sistemas de Pagamento
Event Sourcing e CQRS (Command Query Responsibility Segregation) são padrões complementares que, juntos, formam a espinha dorsal de sistemas de pagamento robustos. Em vez de armazenar apenas o estado atual, registramos cada evento que levou ao estado atual — criando um log de auditoria natural e imutável.
Por Que Event Sourcing para Pagamentos
Em sistemas financeiros, saber o que aconteceu é tão importante quanto saber o estado atual. Event sourcing nos dá rastreabilidade completa: podemos reconstruir o histórico de qualquer transação, entender exatamente quando e por que cada mudança de estado ocorreu, e atender requisitos de auditoria sem esforço adicional.
// Event Store simplificado
interface DomainEvent {
aggregateId: string;
type: string;
data: unknown;
metadata: {
timestamp: Date;
userId: string;
correlationId: string;
};
version: number;
}
class EventStore {
async append(events: DomainEvent[]): Promise<void> {
// Garantia de ordenação e imutabilidade
await this.db.transaction(async (tx) => {
for (const event of events) {
await tx.insert('events', {
...event,
created_at: new Date(),
});
}
});
// Publicar para consumidores
await this.publisher.publishBatch(events);
}
}CQRS: Separando Leitura de Escrita
CQRS complementa event sourcing ao separar os modelos de leitura e escrita. O modelo de escrita (command side) garante integridade e regras de negócio, enquanto os modelos de leitura (query side) são otimizados para cada caso de uso — desde dashboards de tempo real até relatórios analíticos.