Esse projeto foi criado com o objetivo de estudar e demonstrar diferentes padroes de design.

Desafio PicPay — Backend de Pagamentos

Implementação de uma API de pagamentos inspirada no desafio técnico da PicPay, com foco em arquitetura limpa, validações de negócio e integração com serviços externos.

Problema

Criar um sistema de transferências financeiras que respeite regras de negócio complexas: verificar saldo antes de debitar, chamar um serviço externo de autorização, e notificar o recebedor — tudo de forma confiável e bem estruturada.

Solução

API RESTful em TypeScript + Node.js + Express com separação clara entre controllers, services e repositórios (Prisma/PostgreSQL).

Decisões de design:

  • A lógica de autorização foi isolada em um AuthorizationService que encapsula a chamada ao endpoint externo — facilita troca de provedor e melhora testabilidade.
  • Uso de Prisma para type-safety entre schema e código, eliminando erros de runtime comuns em queries manuais.
  • Validações de negócio (saldo suficiente, tipo de usuário) são feitas na camada de serviço, não no controller.
// Serviço de autorização desacoplado da lógica de transferência
class AuthorizationService {
  async isAuthorized(): Promise<boolean> {
    const response = await axios.get(AUTH_API_URL);
    return response.data.message === "Autorizado";
  }
}

Outcome

  • API completa com endpoints para usuários, carteiras e transações
  • Integração com serviço externo de autorização e notificação
  • Schema de banco de dados versionado via migrações do Prisma

O que faria diferente: Adicionar testes de integração para cobrir os fluxos de transferência completos e implementar idempotência nas transações para evitar duplicatas em caso de retry.

Tecnologias

  • TypeScript + Node.js + Express
  • Prisma + PostgreSQL
  • Axios

Links