Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
3bf6f36
feat(payments): implement payments module with stripe integration and…
Apr 14, 2026
591804b
chore(deps): synchronize package lock files for payments module
Apr 14, 2026
e6931db
Merge master into sprint-11-payments (prefer master)
Apr 15, 2026
1915528
fix(deps): update lock files for Payments module in sprint-11 branch
Apr 15, 2026
4cf7bc6
refactor: centralize Customer role constant and fix Instagram IDP map…
Apr 15, 2026
730ff91
fix(tests): correct Money factory method and add new unit tests for c…
Apr 15, 2026
065ad53
feat: implement Stripe webhook processing with inbox pattern and back…
Apr 15, 2026
3a5ea35
build: fix NU1004 by updating packages.lock.json files with force-eva…
Apr 15, 2026
b6497ef
feat: implement subscription creation flow and Stripe webhook process…
Apr 15, 2026
7b96cc4
feat: implement Stripe webhook endpoint to process events into inbox …
Apr 15, 2026
30bc961
feat: add retry mechanism columns to InboxMessage entity and update E…
Apr 15, 2026
2dab2d7
feat: implement Stripe inbox background job and add unit tests for re…
Apr 15, 2026
715cf85
feat: implement payment module with Stripe integration, subscription …
Apr 15, 2026
a7475c5
feat: implement subscription creation command handler and domain enti…
Apr 15, 2026
7cc4a1e
feat: implement payment transaction entity, background job for Stripe…
Apr 15, 2026
058aa75
chore: generate missing package lock files across all projects
Apr 15, 2026
45dbcb8
feat: implement payments module with Stripe integration and add i18n …
Apr 15, 2026
6c41228
feat: implement subscription billing portal handler and add external …
Apr 15, 2026
a853ecf
fix(payments): review fixes, database sync and frontend build
Apr 16, 2026
3054994
fix(payments): fix i18next test mock and translate integration test c…
Apr 16, 2026
fbd2d53
test(payments, comms, ratings): increase test coverage and error bran…
Apr 16, 2026
bd57ea5
test: sync unit tests with integration suite and add domain branch co…
Apr 16, 2026
8a07050
fix: address all review comments and improve overall system integrity
Apr 16, 2026
90fb0ab
test: add integration tests for payment subscriptions and billing por…
Apr 16, 2026
f5a795a
feat: implement Stripe payment module with subscription handling, web…
Apr 16, 2026
966dd78
feat: implement Subscription domain entity and corresponding unit tests
Apr 16, 2026
2937f56
feat: implement Stripe payment gateway integration, subscription comm…
Apr 16, 2026
b36e380
test: increase code coverage for Payments module
Apr 16, 2026
4452b07
test: implement repository tests and improve domain coverage for Paym…
Apr 16, 2026
fc35552
refactor: apply code review improvements, enhance encapsulation and r…
Apr 16, 2026
1f47893
refactor: apply final code review fixes and stabilize E2E/Integration…
Apr 16, 2026
eab1788
refactor: stabilize integration and E2E tests for Payments module and…
Apr 16, 2026
2f19b24
config: remove vercel host from allowed return hosts and keep as comment
Apr 16, 2026
15bf9f4
refactor: apply security, idempotency and testing improvements from c…
Apr 16, 2026
76fc144
refactor: final stabilization of Payments tests and implementation of…
Apr 16, 2026
10af8d8
refactor: apply final code review improvements and stabilize Stripe i…
Apr 16, 2026
68400f8
feat: migrate messaging to Rebus and stabilize security, idempotency …
Apr 16, 2026
0832f7c
test: fix PostgreSQL jsonb operator issue in integration tests
Apr 16, 2026
1187e64
refactor: eliminate dynamic/reflection, fix Stripe v51 breaking chang…
Apr 17, 2026
5e2c1bf
feat: implement Stripe subscription management module with endpoints,…
Apr 17, 2026
5921b59
test: add MockPaymentGateway implementation for E2E testing
Apr 17, 2026
b4bc484
feat: implement subscription creation flow with Stripe integration an…
Apr 17, 2026
a72ef17
refactor: apply technical cleanup and improvements to payments and me…
Apr 17, 2026
e7b637a
fix: remove duplicate PackageVersion entries in Directory.Packages.props
Apr 17, 2026
d388784
fix: correct typo in ArgumentException method call in Money.cs
Apr 17, 2026
8bc4593
fix: update packages.lock.json files after CPM cleanup
Apr 17, 2026
a4bf370
fix: correct namespace and base class for new domain events in Paymen…
Apr 17, 2026
5f2430d
fix: resolve build errors by correcting Stripe SDK property access in…
Apr 17, 2026
74d8970
fix: add missing using Microsoft.AspNetCore.Http in PaymentsEndpoints…
Apr 17, 2026
16c3033
fix: resolve constructor accessibility and mock message bus signature…
Apr 17, 2026
b55257b
fix: align ConfigureProvider calls in integration and E2E tests with …
Apr 17, 2026
f5e8078
fix: restore missing Providers projects to solution and update lock f…
Apr 17, 2026
1f74190
test: fix ProviderCard tests and add test for provider loading profile
Apr 17, 2026
2094dc7
test: increase code coverage for payments module and shared utilities
Apr 17, 2026
5590ff6
refactor: apply ExcludeFromCodeCoverage to boilerplate records and si…
Apr 17, 2026
91cf52e
refactor: apply global coverage exclusions for Enums and boilerplate …
Apr 17, 2026
abd597f
refactor: apply final review improvements and fix technical depth issues
Apr 17, 2026
d7be99c
fix: restore system stability by resolving DI issues and database sch…
Apr 17, 2026
7ed9c0f
fix: resolve DI validation errors in tests and service by registering…
Apr 18, 2026
8706c6d
fix: ensure consistent Money.ToString formatting without thousands se…
Apr 18, 2026
5fd4e75
refactor: optimize code coverage and fix Payments module CI integration
Apr 18, 2026
f8d3934
fix: resolve CS9107 warning and synchronize lock files
Apr 18, 2026
a59c0dd
fix: resolve remaining unit test failures in Payments module
Apr 18, 2026
da891a1
refactor: enhance code coverage by excluding boilerplate and adding t…
Apr 18, 2026
3dfe9bd
test: harden backend coverage for Communications, Users and Shared mo…
Apr 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion .github/workflows/ci-backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ jobs:
ConnectionStrings__Users: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__Search: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__meajudaai-db: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__Payments: ${{ steps.db.outputs.connection-string }}
AZURE_STORAGE_CONNECTION_STRING: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;"
run: |
echo "🧪 Running Unit & Architecture Tests..."
Expand All @@ -176,6 +177,7 @@ jobs:
"src/Modules/Communications/Tests/MeAjudaAi.Modules.Communications.Tests.csproj"
"src/Modules/Ratings/Tests/MeAjudaAi.Modules.Ratings.Tests.csproj"
"src/Modules/SearchProviders/Tests/MeAjudaAi.Modules.SearchProviders.Tests.csproj"
"src/Modules/Payments/Tests/MeAjudaAi.Modules.Payments.Tests.csproj"
"tests/MeAjudaAi.Shared.Tests/MeAjudaAi.Shared.Tests.csproj"
"tests/MeAjudaAi.ApiService.Tests/MeAjudaAi.ApiService.Tests.csproj"
"tests/MeAjudaAi.Architecture.Tests/MeAjudaAi.Architecture.Tests.csproj"
Expand Down Expand Up @@ -266,7 +268,7 @@ jobs:
reporttypes: "Cobertura;JsonSummary"
groupby: "Namespace"
assemblyfilters: "+MeAjudaAi.*;-MeAjudaAi.AppHost;-MeAjudaAi.ServiceDefaults;-MeAjudaAi.Contracts"
classfilters: "-*.Tests;-*.Tests.*;-*Test*;-testhost;-*.Migrations.*;-*Program*;-*.Seeding.*;-*.Monitoring.*;-MeAjudaAi.Shared.Jobs.*;-MeAjudaAi.Shared.Mediator.*;-MeAjudaAi.Shared.API.*"
classfilters: "-*.Tests;-*.Tests.*;-*Test*;-testhost;-*.Migrations.*;-*Program*;-*.Seeding.*;-*.Monitoring.*;-MeAjudaAi.Shared.Jobs.*;-MeAjudaAi.Shared.Mediator.*;-MeAjudaAi.Shared.API.*;-*Configuration;-*Extensions;-*Endpoint;-*DbContextFactory;-MeAjudaAi.Modules.Payments.Infrastructure.Gateways.StripeService"

- name: Upload coverage reports
uses: actions/upload-artifact@v4
Expand Down
23 changes: 8 additions & 15 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,6 @@
<PackageVersion Include="Microsoft.Build.Tasks.Core" Version="18.0.2" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="18.0.2" />
<PackageVersion Include="Microsoft.NET.StringTools" Version="18.0.2" />
<!-- ⚠️ RISCO DE COMPATIBILIDADE: Npgsql 10.x + Hangfire.PostgreSql 1.21.1 -->
<!-- Hangfire.PostgreSql compilado contra Npgsql 6.x, compatibilidade em runtime NÃO VALIDADA -->
<!-- VALIDAÇÃO: Testes de fumaça em Staging + Dashboard Hangfire + Health Checks necessários antes da produção -->
<!-- MONITORAMENTO: Issue #39 rastreia compatibilidade com Npgsql 10.x -->
<!-- FALLBACK: Rollback para EF Core 9.x + Npgsql 8.x se a taxa de falha de jobs > 5% -->
<!-- Mudanças de quebra: https://www.npgsql.org/doc/release-notes/10.0.html -->
<!-- TODO: Implementar gate automático de pipeline para validação em staging (Issue #39) -->
<!-- ASP.NET Core -->
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.6" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.6" />
Expand All @@ -54,7 +47,7 @@
<PackageVersion Include="EFCore.NamingConventions" Version="10.0.1" />
<!-- Microsoft.OpenApi: Mantido em 2.x devido a incompatibilidade com geradores do .NET 10 -->
<!-- Analisado em 2026-04-12: Versão 3.5.1 causa erro CS0200 em IOpenApiMediaType.Example -->
<PackageVersion Include="Microsoft.OpenApi" Version="2.7.2" />
<PackageVersion Include="Microsoft.OpenApi" Version="2.7.3" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="10.0.1" />
<!-- Acesso a Dados -->
Expand Down Expand Up @@ -106,6 +99,7 @@
<PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.0.0" />
<!-- Documentação -->
<PackageVersion Include="Stripe.net" Version="51.0.0" />
Comment thread
frigini marked this conversation as resolved.
<PackageVersion Include="Swashbuckle.AspNetCore" Version="10.1.7" />
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="10.1.7" />
<!-- Validação -->
Expand All @@ -117,14 +111,17 @@
<PackageVersion Include="Azure.Storage.Blobs" Version="12.27.0" />
<!-- Mensageria -->
<PackageVersion Include="RabbitMQ.Client" Version="7.2.1" />
<PackageVersion Include="Rebus" Version="8.9.0" />
<PackageVersion Include="Rebus" Version="8.9.2" />
<PackageVersion Include="Rebus.RabbitMq" Version="10.1.1" />
<PackageVersion Include="Rebus.ServiceProvider" Version="10.7.2" />
<!-- Autenticação e Autorização -->
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.17.0" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols" Version="8.16.0" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.16.0" />
<!-- Health Checks -->
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
<PackageVersion Include="AspNetCore.HealthChecks.NpgSql" Version="9.0.0" />
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
<!-- Jobs em Segundo Plano -->
<PackageVersion Include="Hangfire.Core" Version="1.8.23" />
<PackageVersion Include="Hangfire.AspNetCore" Version="1.8.23" />
<PackageVersion Include="Hangfire.PostgreSql" Version="1.21.1" />
Expand All @@ -137,15 +134,11 @@
<!-- System.IO.Hashing: Mantido na v10 para alinhamento com a stack do .NET 10 -->
<PackageVersion Include="System.IO.Hashing" Version="10.0.6" />
<PackageVersion Include="System.Text.Json" Version="10.0.0" />
<!-- Família IdentityModel - alinhada para evitar divergências de versão -->
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.17.0" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols" Version="8.16.0" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.16.0" />
<!-- Framework de Testes (Apenas xUnit v3) -->
<PackageVersion Include="WireMock.Net" Version="2.2.0" />
<PackageVersion Include="xunit.v3" Version="3.2.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageVersion Include="coverlet.collector" Version="8.0.1" />
<PackageVersion Include="coverlet.collector" Version="10.0.0" />
<!-- Bibliotecas de Teste -->
<PackageVersion Include="FluentAssertions" Version="8.9.0" />
<PackageVersion Include="Moq" Version="4.20.72" />
Expand Down
16 changes: 16 additions & 0 deletions MeAjudaAi.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,22 @@
<Folder Name="/src/Modules/Locations/Tests/">
<Project Path="src/Modules/Locations/Tests/MeAjudaAi.Modules.Locations.Tests.csproj" />
</Folder>
<Folder Name="/src/Modules/Payments/" />
<Folder Name="/src/Modules/Payments/API/">
<Project Path="src/Modules/Payments/API/MeAjudaAi.Modules.Payments.API.csproj" />
</Folder>
<Folder Name="/src/Modules/Payments/Application/">
<Project Path="src/Modules/Payments/Application/MeAjudaAi.Modules.Payments.Application.csproj" />
</Folder>
<Folder Name="/src/Modules/Payments/Domain/">
<Project Path="src/Modules/Payments/Domain/MeAjudaAi.Modules.Payments.Domain.csproj" />
</Folder>
<Folder Name="/src/Modules/Payments/Infrastructure/">
<Project Path="src/Modules/Payments/Infrastructure/MeAjudaAi.Modules.Payments.Infrastructure.csproj" />
</Folder>
<Folder Name="/src/Modules/Payments/Tests/">
<Project Path="src/Modules/Payments/Tests/MeAjudaAi.Modules.Payments.Tests.csproj" />
</Folder>
<Folder Name="/src/Modules/Providers/" />
<Folder Name="/src/Modules/Providers/API/">
<Project Path="src/Modules/Providers/API/MeAjudaAi.Modules.Providers.API.csproj" />
Expand Down
Binary file removed build_errors.txt
Binary file not shown.
2 changes: 1 addition & 1 deletion coverlet.runsettings
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Configuration>
<Format>cobertura</Format>
<Include>[MeAjudaAi*]*</Include>
<Exclude>[*.Tests*]*,[*Test*]*,[testhost]*,[*]*Migrations*,[*]*.DbContextFactory,[*Microsoft.AspNetCore.OpenApi.Generated*]*,[*System.Runtime.CompilerServices*]*,[*System.Text.RegularExpressions.Generated*]*</Exclude>
<Exclude>[*.Tests*]*,[*Test*]*,[testhost]*,[*]*Migrations*,[*]*.DbContextFactory,[*Microsoft.AspNetCore.OpenApi.Generated*]*,[*System.Runtime.CompilerServices*]*,[*System.Text.RegularExpressions.Generated*]*,[*]*.Enums.*</Exclude>
<ExcludeByFile>**/Migrations/*.cs,**/Migrations/**/*.cs,**/*DbContextFactory.cs</ExcludeByFile>
<ExcludeByAttribute>Obsolete,GeneratedCode,CompilerGenerated</ExcludeByAttribute>
<!-- Threshold set to 0 to allow full report generation. Final check is done by CodeCoverageSummary -->
Expand Down
88 changes: 20 additions & 68 deletions docs/messaging.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,71 +9,16 @@ Este documento descreve a estratégia completa de messaging da plataforma MeAjud
### 2.1 Resumo da Implementação

✅ A implementação garante seleção automática de MessageBus por ambiente:
- **RabbitMQ** para desenvolvimento e produção
- **RabbitMQ (via Rebus)** para desenvolvimento e produção
- **NoOp/Mocks** para testes (sem dependências externas)

### 2.2 Factory Pattern para Seleção de MessageBus

**Arquivo**: `src/Shared/Messaging/Factories/MessageBusFactory.cs`

```csharp
public class MessageBusFactory : IMessageBusFactory
{
private readonly IHostEnvironment _environment;
private readonly IConfiguration _configuration;
private readonly IServiceProvider _serviceProvider;

public MessageBusFactory(
IHostEnvironment environment,
IConfiguration configuration,
IServiceProvider serviceProvider)
{
_environment = environment;
_configuration = configuration;
_serviceProvider = serviceProvider;
}

public IMessageBus CreateMessageBus()
{
var rabbitMqEnabled = _configuration.GetValue<bool?>("RabbitMQ:Enabled");

if (_environment.IsEnvironment(EnvironmentNames.Testing))
{
// TESTE: Sempre NoOp para evitar dependências externas
return _serviceProvider.GetRequiredService<NoOpMessageBus>();
}
else
{
// PADRÃO (Dev/Prod): RabbitMQ (apenas se explicitamente habilitado) ou NoOp (fallback)
if (rabbitMqEnabled != false)
{
return _serviceProvider.GetRequiredService<RabbitMqMessageBus>();
}
return _serviceProvider.GetRequiredService<NoOpMessageBus>();
}
}
}
```

### 2.3 Configuração de Dependency Injection

**Arquivo**: `src/Shared/Messaging/MessagingExtensions.cs`
O sistema utiliza um Factory para instanciar o provedor correto baseado no ambiente, garantindo que testes nunca tentem conectar em brokers reais.

```csharp
// Registrar RabbitMQ e NoOp (fallback)
services.TryAddSingleton<RabbitMqMessageBus>();
services.TryAddSingleton<NoOpMessageBus>();

// Registrar o factory e o IMessageBus
services.AddSingleton<IMessageBusFactory, MessageBusFactory>();
services.AddSingleton<IMessageBus>(serviceProvider =>
{
var factory = serviceProvider.GetRequiredService<IMessageBusFactory>();
return factory.CreateMessageBus();
});
```

### 2.4 Configurações por Ambiente
### 2.3 Configurações por Ambiente

#### Desenvolvimento (`appsettings.Development.json`)

Expand All @@ -82,9 +27,7 @@ services.AddSingleton<IMessageBus>(serviceProvider =>
"Messaging": {
"Enabled": true,
"RabbitMQ": {
"Enabled": true,
"ConnectionString": "amqp://guest:guest@localhost:5672/",
"DefaultQueueName": "MeAjudaAi-events-dev"
"DefaultQueueName": "meajudaai-events-dev"
}
}
}
Expand All @@ -97,25 +40,34 @@ services.AddSingleton<IMessageBus>(serviceProvider =>
"Messaging": {
"Enabled": true,
"RabbitMQ": {
"ConnectionString": "${RABBITMQ_CONNECTION_STRING}",
"DefaultQueueName": "MeAjudaAi-events-prod"
"DefaultQueueName": "meajudaai-events-prod"
}
}
}
```

### 2.5 Dead Letter Queue (DLQ)
> **Nota de Migração**: Os nomes das filas foram alterados para lowercase (ex: `meajudaai-events`) para seguir as melhores práticas do RabbitMQ e consistência com `DefaultQueueName` no `RabbitMqOptions.cs`. Antes de realizar o deploy com estas novas configurações, certifique-se de que as filas antigas (com PascalCase) foram drenadas ou migradas, pois o sistema criará novas filas automaticamente.

### 2.4 Dead Letter Queue (DLQ)

A estratégia de Dead Letter Queue para RabbitMQ inclui:
- ✅ **Retentativa automática** com backoff exponencial
- ✅ **Classificação inteligente** de falhas
- ✅ **Dead Letter Exchange (DLX)** automático
- ✅ **TTL configurável** para mensagens na DLQ

### 2.6 Mocks para Testes
## 3. Apêndice: Guia de Migração de Filas (PascalCase para lowercase)

Com a mudança para nomes de fila em lowercase (ex: `MeAjudaAi-Events` para `meajudaai-events`), siga este checklist antes do deploy:

1. **Descoberta**: Identifique filas PascalCase existentes via Management UI ou `rabbitmqctl list_queues`.
2. **Drenagem**: Certifique-se de que todos os consumidores antigos processaram as mensagens pendentes.
3. **Migração (Opcional)**: Se houver volume crítico, use a ferramenta `rabbitmqadmin` para mover mensagens entre filas.
4. **Verificação**: Confirme se os novos consumidores estão apontando para as filas em lowercase.
5. **Limpeza**: Remova as filas PascalCase vazias para evitar confusão operacional.

Testes de integração usam `AddMessagingMocks()` para substituir o sistema real por rastreadores em memória, permitindo verificar publicações sem infraestrutura externa.
Ferramentas recomendadas: `rabbitmqctl`, `rabbitmqadmin` e RabbitMQ Management UI.

## 3. Conclusão
## 4. Conclusão

A plataforma unificou sua infraestrutura de messaging no **RabbitMQ**, simplificando a arquitetura e garantindo paridade entre os ambientes de desenvolvimento e produção.
A plataforma unificou sua infraestrutura de messaging no **RabbitMQ** através do **Rebus**, simplificando a arquitetura e garantindo paridade entre os ambientes de desenvolvimento e produção.
36 changes: 25 additions & 11 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,39 @@ Este é o planejamento estratégico unificado da plataforma MeAjudaAi.
## 📊 Status Atual (Abril 2026)

**Sprint Atual**: 11 (Monetização & Polimento)
**Status**: 🚧 Em andamento
**Status**: ✅ Concluído
**Meta MVP**: 12 - 16 de Maio de 2026

**Stack Principal**: .NET 10 LTS + Aspire 13 + PostgreSQL + NX Monorepo + React 19 + Next.js 15 + Tailwind v4

---

## 💰 Sprint 11 - Monetização & Polimento (13 Abr - 27 Abr 2026) 🚧 [EM ANDAMENTO]
## Sprint 11 - Monetização & Polimento (13-27 Abr 2026) — Concluída em 15 Abr 2026

**Objetivo**: Habilitar o faturamento da plataforma e finalizar a experiência do usuário.

### 🔴 MUST-HAVE:

#### 1. 💳 Payments Module (Módulo de Pagamentos)
* **Arquitetura**: Padrão de **Anti-Corruption Layer (ACL)**. A lógica de negócio não conhece tipos do Stripe. Abstração via `IPaymentGateway`.
* **Arquitetura**: Padrão de **Anti-Corruption Layer (ACL)**. A lógica de negócio não conhece tipos do Stripe. Abstração via `IPaymentGateway`.
* **Funcionalidades**:
* **Assinaturas de Prestadores**: Planos Free, Standard e Gold.
* **Stripe Checkout & Webhooks**: Redirecionamento seguro e processamento de eventos (`invoice.paid`, etc.).
* **Portal de Billing**: Gestão de cartões e cancelamentos.
* ✅ **Assinaturas de Prestadores**: Planos Free, Standard e Gold — implementado com `CreateSubscriptionCommandHandler` com padrão gateway-first e compensação em caso de falha.
* ✅ **Stripe Checkout & Webhooks**: Redirecionamento seguro via `CreateSubscriptionEndpoint` e processamento assíncrono via padrão Inbox (`ProcessInboxJob`).
* ✅ **Qualidade & Testes**: Suíte completa de testes unitários e de integração validando fluxos críticos e tratamento de erros.
* ✅ **Handler `invoice.paid`**: Processamento de renovações mensais e registro de `PaymentTransaction` para auditoria.
* ✅ **Billing Portal**: Endpoint para gestão de assinaturas via Stripe Customer Portal.
* **Localização & i18n**:
* ✅ **Frontend (Customer App)**: Localização completa (PT-BR/EN-US) com suporte a pluralização e datas/moedas.
* ✅ **Backend (FluentValidation)**: Integração de mensagens de validação com arquivos de recurso `.resx` (concluído na Sprint 9 e validado nesta).
* **Schema DB**: `payments` | **ModuleName**: `Payments`.

#### 2. 🌍 Localização Frontend (i18n)
* **Arquitetura**: `i18next` + `react-i18next`.
* **Funcionalidades**: Suporte PT-BR/EN-US, tradução automática de erros do **Zod** e seletor de idioma na UI.
* **Arquitetura**: `i18next` + `react-i18next`. PT-BR como padrão, EN-US como alternativa.
* **Escopo Sprint 11**: App **Customer** (`MeAjudaAi.Web.Customer`) — navegação, formulários, erros Zod localizados, seletor de idioma no header. ✅
* **Qualidade**: Testes unitários com mock de i18n passando. ✅

#### 3. 🏁 Preparação para Lançamento
* **Endurecimento**: Skeletons de carregamento e mensagens de erro amigáveis em todos os fluxos.
* **Documentação Final**: Manuais de Usuário e Guias de Implantação.
#### 3. 🎨 UX Polish
* ✅ **Skeletons de Carregamento**: Placeholders visuais animados (pulse) integrados nas listas de busca e perfil do prestador. Testes de unidade criados. ✅

---

Expand All @@ -43,15 +48,24 @@ Este é o planejamento estratégico unificado da plataforma MeAjudaAi.
### Fase 3: Escala e Provedores Reais
* **Provedores de Comunicação**: Substituir Stubs por SendGrid (E-mail), Twilio (SMS) e Firebase (Push).
* **Verificação Automatizada**: OCR via Azure AI Vision e integração com APIs de antecedentes criminais.
* **i18n Apps Provider/Admin**: Localização frontend para os apps de Prestador e Administrador.
* **Documentação Final**: Manuais de Usuário e Guias de Implantação (revisão global).

### Fase 4: Experiência e Engajamento
* **Módulo de Agendamentos (Bookings)**: Calendário de disponibilidade.
* **Sistema de Disputas**: Mediação administrativa para conflitos.

### 🚀 Arquitetura Evolutiva e Mensageria (Desejável)
* **Evolução do Service Bus**: Implementar lógica de infraestrutura no `Shared.Messaging` para interpretar atributos de mensageria:
* `[DedicatedTopic]`: Uso de `ITopicNameConvention` no Rebus para desviar eventos críticos/frequentes para filas dedicadas, evitando o "vizinho barulhento".
* `[HighVolumeEvent]`: Otimização de I/O no RabbitMQ (mensagens transientes ou Lazy Queues) e paralelismo massivo via `SetNumberOfWorkers`.
* `[CriticalEvent]`: Garantia de persistência via Quorum Queues e priorização de processamento (`x-max-priority`).

---

## ✅ Concluído Recentemente

* **Sprint 11**: Monetização completa (Checkout, Webhooks, Billing Portal, Renovação Automática), Localização i18n Frontend, Skeleton Loaders e cobertura de testes abrangente.
* **Sprint 10**: Módulo de Ratings, Moderação de Conteúdo, Login Social Instagram (#141), Alinhamento de Realms Keycloak, Infra CI/CD (OpenAPI gating) e Documentação (coleções Bruno).
* **Sprint 9**: Estabilização global, Módulo de Comunicações (Infra), Resiliência (`CancellationToken`) e Localização Backend (.resx).
* **Sprint 8D/8E**: Migração completa do Admin Portal para React e Testes E2E com Playwright.
Expand Down
Loading
Loading