Feature: Campaign donation metrics
🔗 Task no ClickUp
ID da Task: https://app.clickup.com/t/86b6rn671
📝 Descrição das mudanças
Esta PR implementa a funcionalidade de Campaign Metrics - um sistema completo para análise de métricas de campanhas com comparação de métodos de pagamento. A implementação inclui:
🎯 Funcionalidade Principal
- ComparePaymentMethodsUseCase: Use case para calcular métricas detalhadas de campanhas
- Análise de Pagamentos: Comparação de performance entre PIX, Cartão de Crédito e Boleto Bancário
- Métricas Calculadas: Total de valores arrecadados e quantidade de transações por método de pagamento
- Filtragem Inteligente: Apenas pagamentos confirmados são considerados nas métricas
🏗 ️ Arquitetura Implementada
interface PaymentComparison {
paymentMethod: PaymentMethod;
totalAmount: number;
totalCount: number;
}
interface CampaignWithMetrics extends Partial<Campaign> {
paymentComparison: PaymentComparison[];
}
📊 Funcionalidades Técnicas
- Validação de Campanha: Verifica se a campanha existe antes de calcular métricas
-
Filtragem de Status: Apenas pagamentos com status
CONFIRMED
são incluídos - Agrupamento por Método: Organiza pagamentos por PIX, CREDIT_CARD, BANK_SLIP
- Conversão de Tipos: Converte valores Decimal do Prisma para numbers
- Tratamento de Erros: Gerenciamento adequado de exceções e casos edge
🧪 Cobertura Completa de Testes
- 8 cenários de teste cobrindo todos os casos de uso
- Mocks adequados para repositórios e serviços de exceção
- Casos edge como campanhas inexistentes e doações sem pagamentos
- Validação de tipos com TypeScript strict mode
- Testes de integração entre donation e campaign repositories
🎯 Tipo de Mudança
- Bug fix (correção de bug)
- New feature (nova funcionalidade)
- Documentation (documentação)
- Refactoring (refatoração)
- Test (testes)
📸 Evidências
Exemplo de Response da API:
✅ Checklist
- Código segue os padrões do projeto
- Testes foram escritos/atualizados
- Documentação foi atualizada
- Self-review foi feito
- Testes unitários estão passando
- Código foi testado localmente