Voltar para desafios
#7 Controle de Assinaturas

#7 Desafio de Programação: Controle de Assinaturas
Descrição
Desenvolva uma API para gerenciar assinaturas em um sistema SaaS ou serviço de streaming. A API deve lidar com planos de assinaturas, cobrança recorrente, upgrades/downgrades e gerenciamento do ciclo de vida das assinaturas. O sistema será orientado a eventos, utilizando uma fila de mensagens para processar atualizações de cobrança e assinaturas.
Objetivo
- Criar uma API para gerenciar assinaturas e seus planos.
- Implementar filas para processar eventos de cobrança e atualizações.
- Atualizar assinaturas automaticamente com base nos eventos processados.
- Fornecer métricas básicas sobre assinaturas e planos.
O que será Aprendido
- Mensageria:
- Uso de filas (RabbitMQ ou Kafka) para processamento assíncrono de eventos.
- Gerenciamento de Assinaturas:
- Criação, atualização e cancelamento de assinaturas.
- Arquitetura Orientada a Eventos:
- Como estruturar um sistema desacoplado utilizando eventos.
- Modelagem de Dados:
- Estruturas para planos, assinaturas e eventos de pagamento.
Arquitetura
Diagrama de Fluxo
Especificações Técnicas
Backend
- Mensageria: RabbitMQ, Kafka ou Redis Streams.
- Banco de Dados: PostgreSQL ou MongoDB.
Componentes Adicionais
- Worker de Processamento:
- Processa eventos da fila, como atualizações de cobrança.
- Fila de Mensagens:
- Armazena eventos para processamento assíncrono.
Endpoints e Payloads
1. Gerenciamento de Assinaturas
Criar Assinatura
- POST
/api/subscriptions
- Body:
1{ 2 "plan_id": "plan_12345", 3 "customer_email": "cliente@email.com" 4}
- Response:
1{ 2 "subscription_id": "sub_67890", 3 "status": "pending", 4 "next_billing_date": "2025-02-01" 5}
Atualização Automática
- Após a criação, a assinatura entra na fila como um evento do tipo
subscription_created
.
2. Webhooks
Atualização de Cobrança
- POST
/api/webhooks/payment
- Body:
1{ 2 "subscription_id": "sub_67890", 3 "event": "payment_success", 4 "amount": 29.99, 5 "date": "2025-01-01" 6}
- Processo:
- A API coloca o evento na fila de mensagens.
- O worker processa o evento e atualiza a assinatura no banco.
3. Relatórios
Obter Métricas de Assinaturas
- GET
/api/reports/subscriptions
- Response:
1{ 2 "total_active": 120, 3 "total_cancelled": 15, 4 "plans": [ 5 { 6 "plan_id": "plan_12345", 7 "name": "Basic Plan", 8 "active_subscriptions": 80 9 }, 10 { 11 "plan_id": "plan_54321", 12 "name": "Premium Plan", 13 "active_subscriptions": 40 14 } 15 ] 16}
Processos com Mensageria
1. Processamento de Webhook
- O provedor de pagamentos envia um evento de pagamento para o webhook.
- A API valida o evento e o coloca na fila de mensagens.
- O worker consome o evento e atualiza o status da assinatura no banco.
2. Processamento de Assinatura
- Após a criação de uma assinatura, um evento
subscription_created
é colocado na fila. - O worker verifica a assinatura e simula o envio para o sistema de cobrança.
Modelo de Dados
Tabelas
-
Plans
id
: UUID.name
: Nome do plano.price
: Preço do plano.billing_cycle
: Mensal ou anual.
-
Subscriptions
id
: UUID.plan_id
: Relacionamento com a tabela de planos.customer_email
: Email do cliente.status
: Pendente, Ativa, Suspensa, Cancelada.next_billing_date
: Data do próximo pagamento.
-
Events
id
: UUID.type
: subscription_created, payment_success, payment_failed.data
: Dados do evento (JSON).processed
: Boolean indicando se o evento já foi processado.
Resultados Esperados
- API Funcional: Capaz de gerenciar assinaturas e lidar com planos.
- Mensageria: Processamento assíncrono de eventos utilizando filas.
- Automação: Atualização automática de status com base em eventos.
- Relatórios: Métricas básicas sobre assinaturas e planos.
Publicação
- Configure RabbitMQ, Kafka ou Redis em um ambiente local ou na nuvem.
- Teste os endpoints com ferramentas como Postman ou Insomnia.
- Realize o deploy em serviços como Heroku, AWS ou Google Cloud.
Boa sorte com o desafio! 🚀
Envie o link do seu projeto
Envie o link do seu projeto para o email contato@racoelho.com.br.