Skip to content

Commit 6ca3777

Browse files
Merge pull request #182 from codante-io/codando-com-ia
codando com ia
2 parents 62cd842 + b7bdddb commit 6ca3777

13 files changed

Lines changed: 1746 additions & 43 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
## Escopo
2+
3+
Implementar e ajustar o fluxo de pagamento via Pagarme (Core v5 Orders + Checkout) para o curso ao vivo “Codando com IA”, sem liberar área de acesso ou enviar e-mails por enquanto, garantindo associação/criação de usuário e notificações no Discord.
4+
5+
## Requisitos Confirmados
6+
7+
- **Preço:** R$ 588,00 (58800 centavos), parcelamento em até 12x sem juros.
8+
- **Métodos de pagamento:** cartão de crédito, boleto e pix.
9+
- **Acesso/e-mails:** nenhum acesso adicional nem e-mails de confirmação neste momento.
10+
- **Usuário:** reutilizar usuário existente pelo e-mail ou criar um novo se não existir.
11+
- **Webhooks:** reutilizar o fluxo já existente, com tratamento específico para o produto do curso.
12+
- **URLs e metadados:** `success_url` = `/curso-ao-vivo/codando-com-ia/sucesso`; `product_slug` = `curso-ao-vivo-codando-com-ia-v1`.
13+
14+
## Estado Atual
15+
16+
- **POST `/api/pagarme/codando-com-ia/checkout`** já cria a Order + Checkout, retornando `payment_url`.
17+
- **GET `/api/pagarme/codando-com-ia/orders/{orderId}`** consulta a Order no Core v5, validando `product_slug`.
18+
- **POST `/api/pagarme/notification`** processa webhooks; atualmente o fluxo é focado em Subscription e apenas registra quando não encontra subscription para este produto.
19+
20+
## Plano de Implementação
21+
22+
### 1. Plano (`codando-com-ia-v1`)
23+
24+
- Garantir via seed/migração idempotente a existência do plano com:
25+
- `slug`: `codando-com-ia-v1`
26+
- `name`: `Codando com IA (Ao Vivo) v1`
27+
- `price_in_cents`: `58800`
28+
- `duration_in_months`: `0`
29+
- `details`: JSON opcional
30+
31+
### 2. Checkout (`POST /api/pagarme/codando-com-ia/checkout`)
32+
33+
- Sanitizar telefone (já implementado) e aceitar ausência sem falhar.
34+
- Localizar usuário pelo e-mail; se não existir, criar com nome, e-mail, telefone (se válido) e senha aleatória hasheada; atualizar dados faltantes quando reaproveitar usuários.
35+
- Incluir `customer.metadata.user_id` no payload enviado ao Pagarme.
36+
- Manter preço, métodos aceitos, parcelas sem juros, `success_url` e metadados existentes.
37+
- Após sucesso na criação da Order:
38+
- Criar `Subscription` vinculada ao plano `codando-com-ia-v1` com `status = pending`, `acquisition_type = purchase`, `provider_id = order.id`, `price_paid_in_cents = order.amount` e `payment_method = null` (até atualização via webhook).
39+
- Retornar `checkoutLink`, `pagarmeOrderID`, `amount`, `status` (sem autenticar/logar o usuário nem disparar e-mails).
40+
41+
### 3. Status (`GET /api/pagarme/codando-com-ia/orders/{orderId}`)
42+
43+
- Manter lógica atual de validação do `product_slug` e retorno filtrado dos dados da Order.
44+
45+
### 4. Webhooks (`POST /api/pagarme/notification`)
46+
47+
- Para eventos `order.*` onde `metadata.product_slug === curso-ao-vivo-codando-com-ia-v1` ou Subscription vinculada ao plano `codando-com-ia-v1`:
48+
- `findOrCreate` do `User` (atualizando nome/telefone ausentes).
49+
- Localizar ou criar a `Subscription` pendente vinculada ao plano.
50+
- Atualizar `status` e campos `payment_method`, `boleto_url`, `boleto_barcode` / `qr_code` diretamente (não usar `changeStatus` para evitar `upgradeUserToPro`).
51+
- Enviar mensagem ao Discord no canal `notificacoes-compras` com resumo do evento (comprador, método, valor, `orderId`, status e contexto).
52+
- Não liberar acesso, não enviar e-mails.
53+
- Garantir idempotência atualizando apenas dados necessários.
54+
55+
### 5. Segurança e Resiliência
56+
57+
- Manter uso de Basic Auth para chamadas à API Pagarme.
58+
- Tolerar telefones inválidos/vazios sem lançar exceções.
59+
- Preservar e detalhar logs de erro no checkout.
60+
61+
### 6. Testes Automatizados
62+
63+
- **Checkout:** garantir criação/associação do usuário e subscription pendente, além do retorno do `payment_url`.
64+
- **Status:** confirmar 200 quando o `product_slug` bate e 404 caso contrário.
65+
- **Webhooks:** simular `order.created`, `order.closed`, `order.paid`, `order.canceled/failed` para validar atualizações da subscription, criação/atualização de usuário e envio de notificações ao Discord (mockado), assegurando que não há promoção a PRO.
66+
67+
### 7. Pós-Implementação
68+
69+
- Rodar migration/seed para criar o plano.
70+
- Executar `php artisan test` para validar o backend.
71+
- Certificar que o webhook do Pagarme aponta para `/api/pagarme/notification` e que `PAGARME_API_KEY` correta está configurada no `.env` de cada ambiente.

0 commit comments

Comments
 (0)