Skip to content

feat: Sprint 8C - Provider Web App Scaffolding (v2)#172

Closed
frigini wants to merge 25 commits intomasterfrom
feature/sprint-8c-provider-web-v2
Closed

feat: Sprint 8C - Provider Web App Scaffolding (v2)#172
frigini wants to merge 25 commits intomasterfrom
feature/sprint-8c-provider-web-v2

Conversation

@frigini
Copy link
Owner

@frigini frigini commented Mar 19, 2026

Configuração do app Provider Web App. Gerado novo PR para evitar diff sujo.

Summary by CodeRabbit

  • New Features

    • Adicionado suporte a slugs amigáveis para URL em provedores, permitindo buscas por ID ou slug.
    • Novo utilitário para geração de slugs com normalização e tratamento de diacríticos.
    • Adicionado guia de design para componentes React com padrões de tipagem e estilo.
  • Bug Fixes

    • Melhorado tratamento de nulabilidade em diversos manipuladores com operadores de supressão de aviso.
    • Adicionadas validações de argumento nulo em extensões de módulo.
  • Refactor

    • Reorganizado namespace de middleware para melhor consistência.
    • Atualizada injeção de dependência para suportar novas consultas de lookup.
    • Melhorado tratamento de privacidade de perfil público de provedor.
  • Tests

    • Adicionados testes abrangentes para lookup de provedor por ID ou slug.
    • Novos testes para utilitário de geração de slugs.
    • Atualizados testes existentes para refletir novos campos e comportamentos.
  • Chores

    • Atualizadas dependências (Next.js, Base UI React, @swc/cli).
    • Atualizada configuração NX para suporte a Next.js.

Filipe Frigini added 25 commits March 13, 2026 16:53
…ities, DTOs, mappers, repositories, event handlers, APIs, and comprehensive tests.
…pported by a new searchable provider entity and slug utility.
…add unit tests for public provider retrieval by ID or slug.
…nd unit tests for GetPublicProviderByIdOrSlug query handler.
…ostgreSQL/PostGIS, new unit tests for SearchableProvider and API extensions, and a new GetPublicProviderByIdOrSlug query handler with its tests.
…nd add `GetPublicProviderByIdOrSlugQueryHandler` with public profile privacy features.
…nd add `GetPublicProviderByIdOrSlugQueryHandler` with public profile privacy features.
…provider query handlers, a searchable provider entity, and security headers middleware.
…roduce SearchableProvider entity, and implement RegisterCustomerCommandHandler with related API extension tests.
…er retrieval by ID or slug with privacy controls.
…ring active/inactive providers, ID/slug queries, and privacy feature flag scenarios.
…tests for public provider retrieval, including privacy feature handling.
…lugQueryHandler and SearchableProvider entity mapping
…roviders modules, including cross-module workflows.
…a dashboard UI, core components, and project configuration, along with new roadmap documentation.
@frigini frigini closed this Mar 19, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 19, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: bc88a090-5117-4149-ace7-e3ffe885feeb

📥 Commits

Reviewing files that changed from the base of the PR and between 9f735fc and 6777bee.

⛔ Files ignored due to path filters (29)
  • src/Aspire/MeAjudaAi.AppHost/packages.lock.json is excluded by !**/packages.lock.json
  • src/Modules/Providers/Infrastructure/Persistence/Migrations/20260318164815_AddProviderSlug.Designer.cs is excluded by !**/Migrations/**, !**/*.Designer.cs
  • src/Modules/Providers/Infrastructure/Persistence/Migrations/20260318164815_AddProviderSlug.cs is excluded by !**/Migrations/**
  • src/Modules/Providers/Infrastructure/Persistence/Migrations/ProvidersDbContextModelSnapshot.cs is excluded by !**/Migrations/**
  • src/Modules/SearchProviders/Infrastructure/Migrations/SearchProvidersDbContextModelSnapshot.cs is excluded by !**/Migrations/**
  • src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20260317151054_AddSlugToSearchableProvider.Designer.cs is excluded by !**/Migrations/**, !**/*.Designer.cs
  • src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20260317151054_AddSlugToSearchableProvider.cs is excluded by !**/Migrations/**
  • src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20260318164839_AddSearchableProviderSlug.Designer.cs is excluded by !**/Migrations/**, !**/*.Designer.cs
  • src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20260318164839_AddSearchableProviderSlug.cs is excluded by !**/Migrations/**
  • src/Web/MeAjudaAi.Web.Admin/packages.lock.json is excluded by !**/packages.lock.json
  • src/Web/MeAjudaAi.Web.Provider/.swcrc is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/index.d.ts is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/next-env.d.ts is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/next.config.js is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/project.json is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/public/.gitkeep is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/public/favicon.ico is excluded by !**/*.ico, !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/app/api/hello/route.ts is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/app/global.css is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/app/layout.tsx is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/app/page.module.css is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/app/page.tsx is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/components/ui/button.tsx is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/src/components/ui/card.tsx is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/MeAjudaAi.Web.Provider/tsconfig.json is excluded by !**/MeAjudaAi.Web.Provider/**
  • src/Web/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • tests/MeAjudaAi.E2E.Tests/packages.lock.json is excluded by !**/packages.lock.json
  • tests/MeAjudaAi.Integration.Tests/packages.lock.json is excluded by !**/packages.lock.json
  • tests/MeAjudaAi.Web.Admin.Tests/packages.lock.json is excluded by !**/packages.lock.json
📒 Files selected for processing (88)
  • docs/roadmap-current.md
  • docs/roadmap-history.md
  • prompts/design-react-project.md
  • src/Aspire/MeAjudaAi.AppHost/Program.cs
  • src/Bootstrapper/MeAjudaAi.ApiService/Extensions/ServiceCollectionExtensions.cs
  • src/Bootstrapper/MeAjudaAi.ApiService/Middlewares/ContentSecurityPolicyMiddleware.cs
  • src/Bootstrapper/MeAjudaAi.ApiService/Middlewares/InspectAuthMiddleware.cs
  • src/Bootstrapper/MeAjudaAi.ApiService/Middlewares/SecurityHeadersMiddleware.cs
  • src/Contracts/Contracts/Modules/Providers/DTOs/ModuleProviderBasicDto.cs
  • src/Contracts/Contracts/Modules/Providers/DTOs/ModuleProviderDto.cs
  • src/Contracts/Contracts/Modules/Providers/DTOs/ModuleProviderIndexingDto.cs
  • src/Contracts/Contracts/Modules/SearchProviders/DTOs/ModuleSearchableProviderDto.cs
  • src/Modules/Providers/API/Endpoints/ProvidersModuleEndpoints.cs
  • src/Modules/Providers/API/Endpoints/Public/GetPublicProviderByIdOrSlugEndpoint.cs
  • src/Modules/Providers/Application/DTOs/ProviderDto.cs
  • src/Modules/Providers/Application/DTOs/PublicProviderDto.cs
  • src/Modules/Providers/Application/Extensions.cs
  • src/Modules/Providers/Application/Handlers/Queries/GetProviderByIdQueryHandler.cs
  • src/Modules/Providers/Application/Handlers/Queries/GetPublicProviderByIdOrSlugQueryHandler.cs
  • src/Modules/Providers/Application/Mappers/ProviderMapper.cs
  • src/Modules/Providers/Application/ModuleApi/ProvidersModuleApi.cs
  • src/Modules/Providers/Application/Queries/GetPublicProviderByIdOrSlugQuery.cs
  • src/Modules/Providers/Application/Queries/GetPublicProviderByIdQuery.cs
  • src/Modules/Providers/Domain/Constants/ProviderErrors.cs
  • src/Modules/Providers/Domain/Entities/Provider.cs
  • src/Modules/Providers/Domain/Events/ProviderProfileUpdatedDomainEvent.cs
  • src/Modules/Providers/Domain/Events/ProviderRegisteredDomainEvent.cs
  • src/Modules/Providers/Domain/Repositories/IProviderRepository.cs
  • src/Modules/Providers/Infrastructure/Events/Mappers/ProviderEventMappers.cs
  • src/Modules/Providers/Infrastructure/Persistence/Configurations/ProviderConfiguration.cs
  • src/Modules/Providers/Infrastructure/Persistence/Repositories/ProviderRepository.cs
  • src/Modules/Providers/Tests/Builders/ProviderBuilder.cs
  • src/Modules/Providers/Tests/Infrastructure/TestInfrastructureExtensions.cs
  • src/Modules/Providers/Tests/Integration/GetPublicProviderByIdIntegrationTests.cs
  • src/Modules/Providers/Tests/Unit/API/Endpoints/GetMyProviderProfileEndpointTests.cs
  • src/Modules/Providers/Tests/Unit/API/Endpoints/GetMyProviderStatusEndpointTests.cs
  • src/Modules/Providers/Tests/Unit/API/Endpoints/UpdateMyProviderProfileEndpointTests.cs
  • src/Modules/Providers/Tests/Unit/API/Endpoints/UploadMyDocumentEndpointTests.cs
  • src/Modules/Providers/Tests/Unit/Application/Handlers/GetPublicProviderByIdQueryHandlerTests.cs
  • src/Modules/Providers/Tests/Unit/Application/Handlers/Queries/GetPublicProviderByIdOrSlugQueryHandlerTests.cs
  • src/Modules/Providers/Tests/Unit/Application/Handlers/Queries/GetPublicProviderByIdQueryHandlerTests.cs
  • src/Modules/Providers/Tests/Unit/Application/Services/ProvidersModuleApiTests.cs
  • src/Modules/Providers/Tests/Unit/Domain/Entities/ProviderTests.cs
  • src/Modules/Providers/Tests/Unit/Infrastructure/Events/Handlers/ProviderProfileUpdatedDomainEventHandlerTests.cs
  • src/Modules/Providers/Tests/Unit/Infrastructure/Events/Handlers/ProviderRegisteredDomainEventHandlerTests.cs
  • src/Modules/Providers/Tests/Unit/Infrastructure/Persistence/Configurations/ProviderConfigurationTests.cs
  • src/Modules/SearchProviders/Application/DTOs/SearchableProviderDto.cs
  • src/Modules/SearchProviders/Application/Handlers/SearchProvidersQueryHandler.cs
  • src/Modules/SearchProviders/Application/ModuleApi/SearchProvidersModuleApi.cs
  • src/Modules/SearchProviders/Domain/Entities/SearchableProvider.cs
  • src/Modules/SearchProviders/Infrastructure/Extensions.cs
  • src/Modules/SearchProviders/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs
  • src/Modules/SearchProviders/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs
  • src/Modules/SearchProviders/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs
  • src/Modules/SearchProviders/Tests/Integration/SearchProvidersIntegrationTestBase.cs
  • src/Modules/SearchProviders/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs
  • src/Modules/SearchProviders/Tests/Unit/Application/ModuleApi/SearchProvidersModuleApiTests.cs
  • src/Modules/SearchProviders/Tests/Unit/Domain/Entities/SearchableProviderTests.cs
  • src/Modules/SearchProviders/Tests/Unit/Domain/Models/SearchResultTests.cs
  • src/Modules/SearchProviders/Tests/Unit/Infrastructure/Repositories/SearchableProviderRepositoryTests.cs
  • src/Modules/Users/API/Extensions.cs
  • src/Modules/Users/Application/Handlers/Commands/CreateUserCommandHandler.cs
  • src/Modules/Users/Application/Handlers/Commands/DeleteUserCommandHandler.cs
  • src/Modules/Users/Application/Handlers/Commands/RegisterCustomerCommandHandler.cs
  • src/Modules/Users/Application/Handlers/Commands/UpdateUserProfileCommandHandler.cs
  • src/Modules/Users/Infrastructure/Identity/Keycloak/KeycloakService.cs
  • src/Modules/Users/Infrastructure/Services/KeycloakUserDomainService.cs
  • src/Modules/Users/Infrastructure/Services/LocalDevelopment/LocalDevelopmentUserDomainService.cs
  • src/Modules/Users/Tests/Builders/UserBuilder.cs
  • src/Modules/Users/Tests/Unit/API/Extensions/APIExtensionsTests.cs
  • src/Modules/Users/Tests/Unit/API/ExtensionsTests.cs
  • src/Modules/Users/Tests/Unit/Application/Queries/GetUsersQueryHandlerTests.cs
  • src/Modules/Users/Tests/Unit/Domain/Entities/UserTests.cs
  • src/Shared/Database/DatabaseConstants.cs
  • src/Shared/Messaging/DeadLetter/RabbitMqDeadLetterService.cs
  • src/Shared/Messaging/Messages/Providers/ProviderProfileUpdatedIntegrationEvent.cs
  • src/Shared/Messaging/Messages/Providers/ProviderRegisteredIntegrationEvent.cs
  • src/Shared/Utilities/Constants/ApiEndpoints.cs
  • src/Shared/Utilities/SlugHelper.cs
  • src/Web/nx.json
  • src/Web/package.json
  • src/Web/tsconfig.base.json
  • tests/MeAjudaAi.ApiService.Tests/Unit/Middlewares/InspectAuthMiddlewareTests.cs
  • tests/MeAjudaAi.E2E.Tests/CrossModule/ProviderServiceCatalogSearchWorkflowTests.cs
  • tests/MeAjudaAi.E2E.Tests/Modules/SearchProviders/SearchProvidersEndToEndTests.cs
  • tests/MeAjudaAi.Shared.Tests/Unit/Functional/ResultTests.cs
  • tests/MeAjudaAi.Shared.Tests/Unit/Utilities/SlugHelperTests.cs
  • tests/MeAjudaAi.Web.Admin.Tests/Pages/ProvidersPageTests.cs

📝 Walkthrough

Resumo Executivo

Walkthrough

Implementação de slug para provedores (providers) em toda a aplicação. Adiciona propriedade Slug às entidades de domínio, DTOs de contrato e componentes de persistência. Substitui lookup por ID único com suporte a busca por ID ou slug. Inclui utilitário SlugHelper para geração de slugs, reorganização de namespaces de middleware e atualizações de dependências web (Next.js, Base UI).

Changes

Cohort / File(s) Summary
Documentação de Roadmap
docs/roadmap-current.md, docs/roadmap-history.md
Atualização dos marcadores de status Sprint 8C — mudança de planejado para em progresso com indicação de scaffolding ativo para apps/provider-web.
Template de Design React
prompts/design-react-project.md
Novo arquivo de diretrizes para conversão de designs em componentes React 19, TypeScript strict, Tailwind CSS v4 com exemplos de padrões e checklist.
AppHost e Configuração
src/Aspire/MeAjudaAi.AppHost/Program.cs, src/Shared/Database/DatabaseConstants.cs
Adição de #pragma warning disable S2068 em torno de credenciais de fallback codificadas para ambiente de teste/desenvolvimento (senhas hardcoded em cenários sem CI).
Reorganização de Middleware
src/Bootstrapper/MeAjudaAi.ApiService/Extensions/ServiceCollectionExtensions.cs, src/Bootstrapper/MeAjudaAi.ApiService/Middlewares/ContentSecurityPolicyMiddleware.cs, src/Bootstrapper/MeAjudaAi.ApiService/Middlewares/InspectAuthMiddleware.cs, src/Bootstrapper/MeAjudaAi.ApiService/Middlewares/SecurityHeadersMiddleware.cs
Mudança de namespace MeAjudaAi.ApiService.Middleware para MeAjudaAi.ApiService.Middlewares (pluralização), remoção de using desnecessário e supressão de regra S3267 em loop.
Utilitário SlugHelper
src/Shared/Utilities/SlugHelper.cs, tests/MeAjudaAi.Shared.Tests/Unit/Utilities/SlugHelperTests.cs
Novo utilitário estático para geração de slugs URL-friendly com normalização (lowercase, remoção de diacríticos, compressão de hífens) e sufixo. Inclui testes unitários com casos de normalização e caracteres especiais.
DTOs de Contrato — Providers
src/Contracts/Contracts/Modules/Providers/DTOs/ModuleProviderBasicDto.cs, src/Contracts/Contracts/Modules/Providers/DTOs/ModuleProviderDto.cs, src/Contracts/Contracts/Modules/Providers/DTOs/ModuleProviderIndexingDto.cs, src/Contracts/Contracts/Modules/SearchProviders/DTOs/ModuleSearchableProviderDto.cs
Adição obrigatória do parâmetro string Slug aos construtores de records — posicionado após Name em todos os casos.
DTOs de Aplicação — Providers
src/Modules/Providers/Application/DTOs/ProviderDto.cs, src/Modules/Providers/Application/DTOs/PublicProviderDto.cs
Extensão de assinaturas de records com propriedade Slug obrigatória após Name.
Entidade de Domínio Provider
src/Modules/Providers/Domain/Entities/Provider.cs
Adição de propriedade Slug com inicialização via SlugHelper.GenerateWithSuffix(), atualização de eventos de domínio (ProviderRegisteredDomainEvent, ProviderProfileUpdatedDomainEvent) para incluir Slug.
Eventos de Domínio e Integração
src/Modules/Providers/Domain/Events/ProviderProfileUpdatedDomainEvent.cs, src/Modules/Providers/Domain/Events/ProviderRegisteredDomainEvent.cs, src/Shared/Messaging/Messages/Providers/ProviderProfileUpdatedIntegrationEvent.cs, src/Shared/Messaging/Messages/Providers/ProviderRegisteredIntegrationEvent.cs
Inclusão de Slug obrigatório (domínio) ou opcional (integração) nas assinaturas de eventos e propagação através de mapeadores.
Repositório e Persistência de Providers
src/Modules/Providers/Domain/Repositories/IProviderRepository.cs, src/Modules/Providers/Infrastructure/Persistence/Repositories/ProviderRepository.cs, src/Modules/Providers/Infrastructure/Persistence/Configurations/ProviderConfiguration.cs
Novo método GetBySlugAsync(), mapeamento EF Core com coluna slug (max 120 chars, obrigatória), índice de banco de dados ix_providers_slug.
Constantes e Utilitários — Providers
src/Modules/Providers/Domain/Constants/ProviderErrors.cs, src/Shared/Utilities/Constants/ApiEndpoints.cs
Novo ProviderErrors.ProviderNotFound, mudança de rota de endpoint: GetPublicById (/{id:guid}/public) → GetPublicByIdOrSlug (/public/{idOrSlug}).
Query e Handler — Lookup Público
src/Modules/Providers/Application/Queries/GetPublicProviderByIdQuery.cs, src/Modules/Providers/Application/Queries/GetPublicProviderByIdOrSlugQuery.cs, src/Modules/Providers/Application/Handlers/Queries/GetPublicProviderByIdOrSlugQueryHandler.cs
Substituição: GetPublicProviderByIdQuery (removido) → GetPublicProviderByIdOrSlugQuery (novo); handler agora normaliza IdOrSlug, tenta parse como GUID, fallback para slug; introduz redação de contato baseada em flag de privacidade.
Endpoint Público
src/Modules/Providers/API/Endpoints/Public/GetPublicProviderByIdOrSlugEndpoint.cs, src/Modules/Providers/API/Endpoints/ProvidersModuleEndpoints.cs
Renomeação de GetPublicProviderByIdEndpoint para GetPublicProviderByIdOrSlugEndpoint, assinatura do handler: Guid idstring idOrSlug, dispatch de query atualizado.
Aplicação — Extensões e Mapeadores
src/Modules/Providers/Application/Extensions.cs, src/Modules/Providers/Application/Mappers/ProviderMapper.cs, src/Modules/Providers/Application/ModuleApi/ProvidersModuleApi.cs, src/Modules/Providers/Infrastructure/Events/Mappers/ProviderEventMappers.cs
Registro de DI para novo handler, mapeamentos com argumentos nomeados para ProviderDto com Slug, propagação de Slug para DTOs de módulo e eventos de integração.
Handler Genérico — Providers
src/Modules/Providers/Application/Handlers/Queries/GetProviderByIdQueryHandler.cs
Uso de constante de domínio ProviderErrors.ProviderNotFound em vez de string hardcoded para resposta not-found.
Testes Unitários — Query Handler Antigo
src/Modules/Providers/Tests/Unit/Application/Handlers/GetPublicProviderByIdQueryHandlerTests.cs
Arquivo removido completamente (testes para handler substituído).
Testes Unitários — Query Handler Novo
src/Modules/Providers/Tests/Unit/Application/Handlers/Queries/GetPublicProviderByIdOrSlugQueryHandlerTests.cs
Novo arquivo com 11 testes [Fact]: sucesso por ID/slug, normalização de slug, fallback GUID, privacidade, não encontrado, inativo.
Testes Integração — Providers
src/Modules/Providers/Tests/Integration/GetPublicProviderByIdIntegrationTests.cs
Atualização para usar GetPublicProviderByIdOrSlugQuery com entrada de string (representação do ID), asserções de sucesso/404 mantidas.
Testes Unitários — Endpoints API
src/Modules/Providers/Tests/Unit/API/Endpoints/GetMyProviderProfileEndpointTests.cs, src/Modules/Providers/Tests/Unit/API/Endpoints/GetMyProviderStatusEndpointTests.cs, src/Modules/Providers/Tests/Unit/API/Endpoints/UpdateMyProviderProfileEndpointTests.cs, src/Modules/Providers/Tests/Unit/API/Endpoints/UploadMyDocumentEndpointTests.cs
Conversão de inicialização de ProviderDto de argumentos posicionais para nomeados, inclusão de Slug e campos adiciona (timestamps, soft-delete).
Builder de Teste — Providers
src/Modules/Providers/Tests/Builders/ProviderBuilder.cs
Novo método WithStatus() e campo _status, refatoração de tier assignment via PromoteTier(), inicialização de status via domain methods (CompleteBasicInfo, Activate, Suspend, Reject).
Testes — Domínio Provider
src/Modules/Providers/Tests/Unit/Domain/Entities/ProviderTests.cs
Asserções para verificar geração de Slug com prefixo "john-provider-", inclusão de Slug em validações de eventos de domínio.
Testes — Configuração EF
src/Modules/Providers/Tests/Unit/Infrastructure/Persistence/Configurations/ProviderConfigurationTests.cs
Atualização de Configure_ShouldHaveSixIndexesConfigure_ShouldHaveSevenIndexes (novo índice em Slug).
Testes — Eventos
src/Modules/Providers/Tests/Unit/Infrastructure/Events/Handlers/ProviderProfileUpdatedDomainEventHandlerTests.cs, src/Modules/Providers/Tests/Unit/Infrastructure/Events/Handlers/ProviderRegisteredDomainEventHandlerTests.cs
Inclusão de slug nas construções de eventos de domínio, asserções em eventos de integração publicados com Slug.
Testes Diversos — Providers
src/Modules/Providers/Tests/Unit/Application/Services/ProvidersModuleApiTests.cs, src/Modules/Providers/Tests/Infrastructure/TestInfrastructureExtensions.cs
Atualização de ProviderDto test com Slug: "test-provider", registro de DI de query handler atualizado.
DTOs SearchProviders
src/Modules/SearchProviders/Application/DTOs/SearchableProviderDto.cs, src/Modules/SearchProviders/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs
Adição de propriedade Slug obrigatória (aplicação) e inicializada (DTO interno).
Entidade SearchableProvider
src/Modules/SearchProviders/Domain/Entities/SearchableProvider.cs
Novo Slug com inicialização via SlugHelper, assinaturas de Create() e UpdateBasicInfo() extendidas para aceitar slug, fallback de geração em Reconstitute().
Aplicação SearchProviders
src/Modules/SearchProviders/Application/Handlers/SearchProvidersQueryHandler.cs, src/Modules/SearchProviders/Application/ModuleApi/SearchProvidersModuleApi.cs
Propagação de Slug em mapeamentos para SearchableProviderDto, passagem de providerData.Slug em UpdateBasicInfo() e Create().
Persistência SearchProviders
src/Modules/SearchProviders/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs, src/Modules/SearchProviders/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs
Mapeamento EF Core com coluna slug (required, max 120), seleção de slug em query SQL com mapeamento em MapToEntity().
Extensões SearchProviders
src/Modules/SearchProviders/Infrastructure/Extensions.cs
Refatoração de lógica isTesting: remoção de gating IsDevelopment(), melhoria de validação de connection-string com fallback condicional e mensagem de erro detalhada.
Testes SearchProviders
src/Modules/SearchProviders/Tests/...
Múltiplos arquivos: atualização de CreateTestSearchableProvider() com BuildTestSlug(), inclusão de slug em testes de query/integração, uso de SlugHelper.Generate(), refatoração de assinatura Create() e UpdateBasicInfo() com argumentos nomeados.
Módulo Users — Nulabilidade
src/Modules/Users/Application/Handlers/Commands/CreateUserCommandHandler.cs, src/Modules/Users/Application/Handlers/Commands/DeleteUserCommandHandler.cs, src/Modules/Users/Application/Handlers/Commands/RegisterCustomerCommandHandler.cs, src/Modules/Users/Application/Handlers/Commands/UpdateUserProfileCommandHandler.cs, src/Modules/Users/Infrastructure/Identity/Keycloak/KeycloakService.cs, src/Modules/Users/Infrastructure/Services/KeycloakUserDomainService.cs, src/Modules/Users/Infrastructure/Services/LocalDevelopment/LocalDevelopmentUserDomainService.cs
Adição de null-forgiving operators (!) em dereferências de Value, null-guard em RegisterCustomerCommandHandler e variáveis locais para melhor rastreamento.
Extensões Users
src/Modules/Users/API/Extensions.cs
Adição de validação null-guard para argumentos services e configuration em métodos públicos.
Testes Users — API
src/Modules/Users/Tests/Unit/API/Extensions/APIExtensionsTests.cs, src/Modules/Users/Tests/Unit/API/ExtensionsTests.cs
Atualização de testes: uso de DatabaseConstants.DefaultTestConnectionString, expectativa de ArgumentNullException para null config, desabilitação de paralelização, novos casos para validação de null args, comportamento de empty config alterado para InvalidOperationException.
Testes Users — Handlers
src/Modules/Users/Tests/Unit/Application/Queries/GetUsersQueryHandlerTests.cs, src/Modules/Users/Tests/Unit/Domain/Entities/UserTests.cs
Adição de null-forgiving operator em User.Create(...).Value!.
Builder Users
src/Modules/Users/Tests/Builders/UserBuilder.cs
Adição de null-forgiving operator em return statement.
Infraestrutura Compartilhada
src/Shared/Messaging/DeadLetter/RabbitMqDeadLetterService.cs
Refatoração de ObjectDisposedException: mudança de lançamento manual para ObjectDisposedException.ThrowIf().
Configuração Web — Nx/TypeScript
src/Web/nx.json, src/Web/tsconfig.base.json, src/Web/package.json
Adição de plugin @nx/next, gerador Next.js, reformatação de arrays/objetos em linhas únicas, adição de @swc/cli, @base-ui/react, next em dependencies.
Testes E2E
tests/MeAjudaAi.E2E.Tests/CrossModule/ProviderServiceCatalogSearchWorkflowTests.cs, tests/MeAjudaAi.E2E.Tests/Modules/SearchProviders/SearchProvidersEndToEndTests.cs
Inserção de coluna slug em SQL de seed com valor computado (name.ToLowerInvariant() com substituição de espaços/underscores), upsert com EXCLUDED.slug.
Testes Compartilhados
tests/MeAjudaAi.Shared.Tests/Unit/Functional/ResultTests.cs, tests/MeAjudaAi.Web.Admin.Tests/Pages/ProvidersPageTests.cs
Adição de null-forgiving operator em Result test, adição de argumento Slug em ModuleProviderDto.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • Sprint 8c: slug implementation #165: Implementação direta do feature de slug em provider — modifica os mesmos artefatos de código (entidade Provider/SearchableProvider, DTOs, SlugHelper, query/handler GetPublicProviderByIdOrSlug, GetBySlugAsync, configurações EF e testes associados).
  • Feature/module integration #30: Mudanças relacionadas a contratos de módulo Providers/SearchProviders — ambas adicionam/propagam campo Slug em ModuleProviderIndexingDto, ProvidersModuleApi e SearchProviders mappings.
  • refactor: rename Search module to SearchProviders #18: Modificação abrangente do módulo SearchProviders — as mudanças de ambas as PRs sobrepõem-se em namespaces, DbContext e múltiplos arquivos sob src/Modules/SearchProviders/*.

Poem

🐰 Slug da Velocidade

Um coelho rápido com slug no pé,
Corre por providers sem tropeçar,
De ID ou nome, qual caminho pegar?
SlugHelper mágico faz normalizar,
Agora a busca é muito mais fácil de encontrar! ✨

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/sprint-8c-provider-web-v2

@frigini frigini deleted the feature/sprint-8c-provider-web-v2 branch March 19, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant