Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions docs/roadmap-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ Este documento contém o registro de todas as sprints concluídas para fins de a

---

## ✅ Sprint 10 - Qualidade & Onboarding (Concluída em 14 Abr 2026)

**Objetivo**: Estabelecer confiança na plataforma através de avaliações e simplificar o acesso de novos prestadores.

### Entregas:
- ✅ **Ratings Module**: Sistema de avaliações completo com desnormalização para performance de busca.
- ✅ **Moderação**: Filtros automáticos e manuais para comentários.
- ✅ **Login Social (Instagram)**: Reintegração via OIDC sincronizada entre ambientes (Issue #141).
- ✅ **Infra CI/CD**: OpenAPI Breaking Change Gating funcional no pipeline.
- ✅ **Documentação**: 100% de cobertura de coleções Bruno (.bru) para módulos ativos.
- ✅ **Keycloak Alignment**: Realms de `dev` e `prod` estruturalmente sincronizados (Roles e Clients).

---

## ✅ Sprint 9 - BUFFER & Mitigação de Risco (Concluída em 11 Abr 2026)

**Foco**: Estabilização, Refatoração e Módulo de Comunicações (Infra).
Expand Down
30 changes: 3 additions & 27 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,40 +6,15 @@ Este é o planejamento estratégico unificado da plataforma MeAjudaAi.

## 📊 Status Atual (Abril 2026)

**Sprint Atual**: 10 (Qualidade & Onboarding)
**Sprint Atual**: 11 (Monetização & Polimento)
**Status**: 🚧 Em andamento
**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 10 - Qualidade & Onboarding (12 Abr - 26 Abr 2026) 🚧 [EM ANDAMENTO]

**Objetivo**: Estabelecer confiança na plataforma através de avaliações e simplificar o acesso de novos prestadores.

### 🔴 MUST-HAVE:

#### 1. 🌟 Ratings Module (Módulo de Avaliações) ✅ [CONCLUÍDO]
* **Arquitetura**: **Consistência Eventual**. O módulo de busca (`SearchProviders`) não fará Join com o módulo de Ratings. Sempre que um review for aprovado, um `ReviewApprovedIntegrationEvent` será disparado e o módulo de busca atualizará o campo `AverageRating` no seu próprio registro desnormalizado.
* **Funcionalidades**:
* ✅ **Avaliação de Prestadores**: Clientes podem adicionar nota (1 a 5 estrelas) e comentário textual após a conclusão de um serviço.
* ✅ **Moderação de Conteúdo**: Filtro automático via Regex e manual para comentários que violem as regras (xingamentos, ofensas, SPAM).
* ✅ **Ranking de Busca**: Algoritmo de busca priorizando prestadores com melhor média e maior volume de avaliações verificadas.
* **Schema DB**: `ratings` | **ModuleName**: `Ratings`.

#### 2. 🔑 Login Social (Instagram) - ISSUE #141 ✅ [CONCLUÍDO]
* **Ação**: Configuração de Identity Provider nativo do Instagram no Keycloak para permitir que prestadores usem seu perfil do Instagram para autenticação.

#### 3. 🛡️ OpenAPI Breaking Change Gating (CI) ✅ [CONCLUÍDO]
* **Ação**: Novo step no workflow de PR para comparar o `api-base.json` com `api-current/api-spec.json` usando `breaking-only` e `fail-on-diff` para falhar o build caso existam mudanças destrutivas na API. Corrigido para rodar em ambiente `Testing` para evitar dependências de segredos reais.

#### 4. 📋 Coleções Bruno (.bru) ✅ [CONCLUÍDO]
* **Ação**: Documentação técnica de 100% dos endpoints existentes em `src/Modules/*/API/API.Client/`.

---

## 💰 Sprint 11 - Monetização & Polimento (27 Abr - 11 Mai 2026) [EM PLANEJAMENTO]
## 💰 Sprint 11 - Monetização & Polimento (13 Abr - 27 Abr 2026) 🚧 [EM ANDAMENTO]

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

Expand Down Expand Up @@ -77,6 +52,7 @@ Este é o planejamento estratégico unificado da plataforma MeAjudaAi.

## ✅ Concluído Recentemente

* **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
42 changes: 1 addition & 41 deletions docs/technical-debt.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,17 @@ Este documento rastreia **débitos técnicos e seu histórico de otimização**.
**Sprint**: Sprint 6-7 (30 Dez 2025 - 16 Jan 2026)
**Status**: Itens de baixa a média prioridade

### 📊 Frontend - Cobertura de Testes (MÉDIA)

**Severidade**: MÉDIA (quality assurance)
**Status**: 🔄 EM SPRINT 8E (E2E Tests com Playwright)

**Descrição**: Admin Portal foi migrado para React. Testes de frontend agora focam em E2E com Playwright.

**Framework de Testes**: Playwright (para todos os apps React)
- Customer Web App
- Provider Web App
- Admin Portal (React)

**BDD**: Playwright para testes end-to-end de fluxos completos (Frontend → Backend → APIs terceiras).

---


## 🔄 Refatorações de Código (BACKLOG)

**Status**: Baixa prioridade, não críticos para MVP

### 🏗️ Refatoração MeAjudaAi.Shared.Messaging (OTIMIZADO)

**Status**: ✅ `IRabbitMqInfrastructureManager` implementado.
**Pendente**: Event handlers para comunicação entre novos módulos (SearchProviders, ServiceCatalogs).

---

## 🔗 GitHub Issues - Débitos Técnicos Sincronizados

### 🔐 [ISSUE #141] Reintegrar login social com Instagram via Keycloak OIDC
**Severidade**: BAIXA (feature parity)
**Status**: OPEN
**Descrição**: Keycloak 26.x removeu built-in Instagram provider. Necessário configurar como generic OIDC.


### 🚀 [ISSUE #112] tech: aguardar versão stable do Aspire.Hosting.Keycloak
**Status**: 📋 OTIMIZADO (Sprint 8B.2)
**Descrição**: Aspire.Hosting.Keycloak (preview) não suporta health checks reais. Serviços iniciam sem esperar Keycloak estar pronto.
**Impacto**: Console logs do backend e Admin Portal mostram falhas de conexão transientes até Keycloak inicializar.

---

## ⚠️ CRÍTICO: Hangfire + Npgsql 10.x Compatibility Risk

Expand Down Expand Up @@ -96,9 +65,7 @@ Este documento rastreia **débitos técnicos e seu histórico de otimização**.
**Severidade**: MÉDIA
**Sprint**: Backlog

- [ ] Apply CancellationToken to ServiceCatalogs/Documents/Locations Effects
- [ ] Add per-component CancellationTokenSource
- [ ] Implement navigation-triggered cancellation
- [ ] Implement focus-based cancellation strategy

**Origem**: Sprint 7.18

Expand All @@ -117,13 +84,6 @@ Este documento rastreia **débitos técnicos e seu histórico de otimização**.

---

## ✅ Resumo de Débitos Técnicos Resolvidos (Sprint 8B.2 - Tech Excellence)

### 🛡️ Final Technical Excellence - Automação e Padrões
- ✅ **Automação Keycloak**: Implementado `KeycloakBootstrapService` no AppHost para criar automaticamente os clients via API REST do Keycloak durante a inicialização, substituindo a necessidade de scripts PowerShell externos.
- ✅ **Refatoração Shared**: Extensões de monitoramento centralizadas em `MonitoringExtensions.cs`.
- ✅ **Issue #113**: Configuração de logging de resiliência HTTP com Polly modernizada para injetar `ILogger` a partir do DI, corrigindo problemas de log tracking.
- ✅ **Padronização de Records**: Sintaxe de DTOs atualizada para o formato "Positional Records" (ex: `ModuleDocumentDto`), mantendo a abordagem property-based apenas onde há validação complexa de domínio.
## 📝 Instruções para Mantenedores

1. **Conversão para Issues**: Copiar descrição para GitHub issue com labels (`technical-debt`, `testing`, `enhancement`)
Expand Down
83 changes: 70 additions & 13 deletions infrastructure/keycloak/realms/meajudaai-realm.dev.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@
"name": "meajudaai-system-admin",
"description": "Administrador do sistema - todas as permissões"
},
{
"name": "meajudaai-super-admin",
"description": "Super Administrador - acesso total irrestrito"
},
{
"name": "meajudaai-user-admin",
"description": "Administrador de usuários - gerenciar usuários"
Expand Down Expand Up @@ -87,6 +91,22 @@
"name": "meajudaai-location-manager",
"description": "Gerente de localidades - gerenciar cidades e estados"
},
{
"name": "meajudaai-provider-standard",
"description": "Prestador de serviços - Plano Standard (Gratuito)"
},
{
"name": "meajudaai-provider-silver",
"description": "Prestador de serviços - Plano Silver (Premium)"
},
{
"name": "meajudaai-provider-gold",
"description": "Prestador de serviços - Plano Gold (Premium Plus)"
},
{
"name": "meajudaai-provider-platinum",
"description": "Prestador de serviços - Plano Platinum (Elite)"
},
{
"name": "customer",
"description": "Cliente da plataforma"
Expand Down Expand Up @@ -125,21 +145,59 @@
}
},
{
"trustEmail": false,
"providerId": "instagram",
"alias": "instagram",
"displayName": "Instagram",
"providerId": "oauth2",
"_comment": "Nota: Suporte nativo ao Instagram removido no Keycloak 26.x. Utilizando o provedor OAuth2 genérico para garantir que as URLs da Basic Display API sejam respeitadas e contornar a ausência de OIDC discovery no Instagram.",
"enabled": true,
"authenticateByDefault": false,
"trustEmail": false,
"storeToken": false,
"config": {
"clientId": "${INSTAGRAM_CLIENT_ID}",
"clientSecret": "${INSTAGRAM_CLIENT_SECRET}"
},
"alias": "instagram",
"addReadTokenRoleOnCreate": false,
"authenticateByDefault": false,
"firstBrokerLoginFlowAlias": "first broker login",
"displayName": "Instagram"
"config": {
"clientId": "${INSTAGRAM_CLIENT_ID}",
"clientSecret": "${INSTAGRAM_CLIENT_SECRET}",
"authorizationUrl": "https://api.instagram.com/oauth/authorize",
"tokenUrl": "https://api.instagram.com/oauth/access_token",
"userInfoUrl": "https://graph.instagram.com/me?fields=id,username",
"defaultScope": "user_profile",
"syncMode": "IMPORT",
"userIp": "false"
}
}
],
"identityProviderMappers": [
{
"identityProviderAlias": "instagram",
"identityProviderMapper": "hardcoded-role-idp-mapper",
"name": "instagram-user-role",
"config": {
"syncMode": "INHERIT",
"role": "customer"
}
},
{
"identityProviderAlias": "instagram",
"identityProviderMapper": "oauth2-user-attribute-idp-mapper",
"name": "instagram-username",
"config": {
"syncMode": "INHERIT",
"jsonField": "username",
"userAttribute": "username"
}
},
{
"identityProviderAlias": "instagram",
"identityProviderMapper": "oauth2-user-attribute-idp-mapper",
"name": "instagram-id-to-userid",
"config": {
"syncMode": "INHERIT",
"jsonField": "id",
"userAttribute": "userID"
}
}
Comment thread
frigini marked this conversation as resolved.
],
"clients": [
{
"clientId": "admin-portal",
Expand Down Expand Up @@ -194,7 +252,7 @@
"publicClient": true,
"standardFlowEnabled": true,
"implicitFlowEnabled": false,
"directAccessGrantsEnabled": true,
"directAccessGrantsEnabled": false,
"serviceAccountsEnabled": false,
"protocol": "openid-connect",
"redirectUris": [
Expand Down Expand Up @@ -238,7 +296,7 @@
"publicClient": true,
"standardFlowEnabled": true,
"implicitFlowEnabled": false,
"directAccessGrantsEnabled": true,
"directAccessGrantsEnabled": false,
"serviceAccountsEnabled": false,
"protocol": "openid-connect",
"redirectUris": [
Expand Down Expand Up @@ -299,8 +357,7 @@
"serviceAccountClientId": "meajudaai-api-service",
"clientRoles": {
"realm-management": [
"view-users",
"query-users",
"manage-users",
"view-realm"
]
}
Expand Down
Loading
Loading