diff --git a/MeAjudaAi.sln b/MeAjudaAi.sln index d17613c1c..98f8054f9 100644 --- a/MeAjudaAi.sln +++ b/MeAjudaAi.sln @@ -127,23 +127,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Search", "Search", "{6FF68F EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "API", "API", "{977BE21B-C0F0-4625-9C9D-8A5A6D8C2D49}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.Search.API", "src\Modules\Search\API\MeAjudaAi.Modules.Search.API.csproj", "{68F39D90-3AF5-9037-B03D-B08B48E4A9A8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.SearchProviders.API", "src\Modules\SearchProviders\API\MeAjudaAi.Modules.SearchProviders.API.csproj", "{68F39D90-3AF5-9037-B03D-B08B48E4A9A8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application", "{6F70C0C2-B928-4F73-9D70-038F3E625A95}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.Search.Application", "src\Modules\Search\Application\MeAjudaAi.Modules.Search.Application.csproj", "{0A5B25B9-7991-B208-5D91-476CF0A14A1B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.SearchProviders.Application", "src\Modules\SearchProviders\Application\MeAjudaAi.Modules.SearchProviders.Application.csproj", "{0A5B25B9-7991-B208-5D91-476CF0A14A1B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Domain", "Domain", "{855F30AA-D1A2-4A1F-BB2B-68DE6D78AFEF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.Search.Domain", "src\Modules\Search\Domain\MeAjudaAi.Modules.Search.Domain.csproj", "{C5E6E9C4-A027-5880-D304-BE3FC5E9B964}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.SearchProviders.Domain", "src\Modules\SearchProviders\Domain\MeAjudaAi.Modules.SearchProviders.Domain.csproj", "{C5E6E9C4-A027-5880-D304-BE3FC5E9B964}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastructure", "{9BC7D786-47F5-44BB-88A1-DDEB0022FF23}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.Search.Infrastructure", "src\Modules\Search\Infrastructure\MeAjudaAi.Modules.Search.Infrastructure.csproj", "{0A64D976-2B75-C6F2-9C87-3A780C963FA3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.SearchProviders.Infrastructure", "src\Modules\SearchProviders\Infrastructure\MeAjudaAi.Modules.SearchProviders.Infrastructure.csproj", "{0A64D976-2B75-C6F2-9C87-3A780C963FA3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{4726175B-331E-49FA-A49A-EE5AC30B495A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.Search.Tests", "src\Modules\Search\Tests\MeAjudaAi.Modules.Search.Tests.csproj", "{C7F6B6F4-4F9C-C844-500C-87E3802A6C4B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeAjudaAi.Modules.SearchProviders.Tests", "src\Modules\SearchProviders\Tests\MeAjudaAi.Modules.SearchProviders.Tests.csproj", "{C7F6B6F4-4F9C-C844-500C-87E3802A6C4B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Catalogs", "Catalogs", "{8B551008-B254-EBAF-1B6D-AB7C420234EA}" EndProject diff --git a/docs/README.md b/docs/README.md index 5653bebca..7396f15f4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -56,7 +56,7 @@ Se você é novo no projeto, comece por aqui: | **[📅 Módulo Bookings](./modules/bookings.md)** | Sistema de agendamentos (planejado) | | **[📄 Módulo Documents](./modules/documents.md)** | Gerenciamento de documentos | | **[🔧 Módulo Providers](./modules/providers.md)** | Prestadores de serviços, verificação e documentos | -| **[🔍 Módulo Search](./modules/search.md)** | Busca geoespacial de prestadores com PostGIS | +| **[🔍 Módulo SearchProviders](./modules/search_providers.md)** | Busca geoespacial de prestadores com PostGIS | | **[📋 Módulo Services](./modules/services.md)** | Catálogo de serviços (planejado) | | **[👥 Módulo Users](./modules/users.md)** | Gestão de usuários, autenticação e perfis | diff --git a/docs/modules/search.md b/docs/modules/search_providers.md similarity index 90% rename from docs/modules/search.md rename to docs/modules/search_providers.md index 7421b06d2..d0b899bf9 100644 --- a/docs/modules/search.md +++ b/docs/modules/search_providers.md @@ -1,10 +1,10 @@ -# 🔍 Módulo Search - Busca Geoespacial de Prestadores +# 🔍 módulo SearchProviders - Busca Geoespacial de Prestadores -Este documento detalha a implementação completa do módulo Search, responsável pela busca geoespacial de prestadores de serviços na plataforma MeAjudaAi. +Este documento detalha a implementação completa do módulo SearchProviders, responsável pela busca geoespacial de prestadores de serviços na plataforma MeAjudaAi. ## 🎯 Visão Geral -O módulo Search implementa um **read model otimizado** para buscas geoespaciais de prestadores, utilizando **PostGIS** para queries eficientes baseadas em localização. Segue os princípios de **Domain-Driven Design (DDD)** e **Clean Architecture**. +O módulo SearchProviders implementa um **read model otimizado** para buscas geoespaciais de prestadores, utilizando **PostGIS** para queries eficientes baseadas em localização. Segue os princípios de **Domain-Driven Design (DDD)** e **Clean Architecture**. ### **Responsabilidades Principais** - ✅ **Busca por proximidade** (raio de distância em quilômetros) @@ -29,7 +29,7 @@ src/Modules/Search/ │ └── DTOs/ # Data Transfer Objects ├── Domain/ # Camada de domínio │ ├── Entities/ # SearchableProvider (aggregate) -│ ├── ValueObjects/ # SearchResult, SearchableProviderId +│ ├── ValueObjects/ # SearchProvidersProvidersResult, SearchableProviderId │ ├── Enums/ # ESubscriptionTier │ └── Repositories/ # ISearchableProviderRepository ├── Infrastructure/ # Camada de infraestrutura @@ -71,7 +71,7 @@ Read model denormalizado com dados necessários para busca: ### **Requisitos de Sistema** #### **PostgreSQL com PostGIS** -O módulo Search requer PostgreSQL 12+ com a extensão PostGIS para queries geoespaciais. +O módulo SearchProviders requer PostgreSQL 12+ com a extensão PostGIS para queries geoespaciais. **Instalação do PostGIS:** @@ -95,7 +95,7 @@ SELECT PostGIS_Version(); ### **Migrações de Banco de Dados** -O módulo usa schema isolado `search` com suporte PostGIS. +O módulo usa schema isolado `SearchProviders` com suporte PostGIS. **Aplicar migrações:** @@ -113,7 +113,7 @@ dotnet ef migrations add --startup-project ..\..\..\..\Bootstrap ``` **Estrutura criada:** -- Schema: `search` +- Schema: `SearchProviders` - Tabela: `searchable_providers` (snake_case) - Extensão: `postgis` (geolocalização) - Índices: GIST spatial index na coluna `location` @@ -139,16 +139,16 @@ export DB_CONNECTION_STRING="Host=prod-server;Database=MeAjudaAi;..." O módulo é registrado automaticamente no `Program.cs`: ```csharp -// Registra o módulo Search completo (Domain, Application, Infrastructure, API) +// Registra o módulo SearchProviders completo (Domain, Application, Infrastructure, API) // Internamente registra DbContext, Repositories, Handlers, Validators -builder.Services.AddSearchModule(builder.Configuration); +builder.Services.AddSearchProvidersModule(builder.Configuration); -// Mapeia todos os endpoints do módulo Search +// Mapeia todos os endpoints do módulo SearchProviders // Substitui a necessidade de chamar métodos individuais de registro -app.UseSearchModule(); +app.UseSearchProvidersModule(); ``` -**Nota:** Os métodos `AddSearchModule()` e `UseSearchModule()` substituem as chamadas individuais anteriores (`AddSearchInfrastructure`, `AddSearchApplication`, `MapSearchEndpoints`), consolidando o registro em dois métodos simples. +**Nota:** Os métodos `AddSearchProvidersModule()` e `UseSearchProvidersModule()` substituem as chamadas individuais anteriores (`AddSearchProvidersInfrastructure`, `AddSearchProvidersApplication`, `MapSearchProvidersEndpoints`), consolidando o registro em dois métodos simples. --- @@ -351,11 +351,11 @@ USING GIST (location); ## 🔗 Integração com Outros Módulos > ⚠️ **IMPORTANTE**: A integração automática com outros módulos ainda não está implementada. -> O módulo Search atualmente opera de forma independente sem sincronização automática. +> O módulo SearchProviders atualmente opera de forma independente sem sincronização automática. > Os dados são estáticos até que a integração via eventos de domínio seja implementada. ### **Providers Module** -O módulo Search é um **read model** sincronizado com o módulo Providers: +O módulo SearchProviders é um **read model** sincronizado com o módulo Providers: - Eventos de domínio disparam atualização do SearchableProvider - Sincronização via domain events ou mensageria (futura implementação) @@ -402,7 +402,9 @@ Tests/ ### **Executar Testes** ```powershell -# Todos os testes do módulo Search +```powershell +# Todos os testes do módulo SearchProviders +dotnet test src\Modules\Search\Tests\ dotnet test src\Modules\Search\Tests\ # Apenas testes unitários @@ -529,7 +531,7 @@ redis-cli ping # Deve retornar PONG ## 🤝 Contribuindo -Para contribuir com o módulo Search: +Para contribuir com o módulo SearchProviders: 1. Leia o [Guia de Desenvolvimento](../development.md) 2. Implemente testes (cobertura mínima: 80%) diff --git a/src/Bootstrapper/MeAjudaAi.ApiService/MeAjudaAi.ApiService.csproj b/src/Bootstrapper/MeAjudaAi.ApiService/MeAjudaAi.ApiService.csproj index 9bc2f39b8..257c44fd2 100644 --- a/src/Bootstrapper/MeAjudaAi.ApiService/MeAjudaAi.ApiService.csproj +++ b/src/Bootstrapper/MeAjudaAi.ApiService/MeAjudaAi.ApiService.csproj @@ -21,7 +21,7 @@ - + diff --git a/src/Bootstrapper/MeAjudaAi.ApiService/Program.cs b/src/Bootstrapper/MeAjudaAi.ApiService/Program.cs index 592f526d9..eab8b69dc 100644 --- a/src/Bootstrapper/MeAjudaAi.ApiService/Program.cs +++ b/src/Bootstrapper/MeAjudaAi.ApiService/Program.cs @@ -4,7 +4,7 @@ using MeAjudaAi.Modules.Documents.API; using MeAjudaAi.Modules.Locations.Infrastructure; using MeAjudaAi.Modules.Providers.API; -using MeAjudaAi.Modules.Search.API; +using MeAjudaAi.Modules.SearchProviders.API; using MeAjudaAi.Modules.Users.API; using MeAjudaAi.ServiceDefaults; using MeAjudaAi.Shared.Extensions; @@ -32,7 +32,7 @@ public static async Task Main(string[] args) builder.Services.AddUsersModule(builder.Configuration); builder.Services.AddProvidersModule(builder.Configuration); builder.Services.AddDocumentsModule(builder.Configuration); - builder.Services.AddSearchModule(builder.Configuration); + builder.Services.AddSearchProvidersModule(builder.Configuration); builder.Services.AddLocationModule(builder.Configuration); builder.Services.AddCatalogsModule(builder.Configuration); @@ -106,7 +106,7 @@ private static async Task ConfigureMiddlewareAsync(WebApplication app) app.UseUsersModule(); app.UseProvidersModule(); app.UseDocumentsModule(); - app.UseSearchModule(); + app.UseSearchProvidersModule(); app.UseLocationModule(); app.UseCatalogsModule(); } diff --git a/src/Modules/Search/API/Endpoints/SearchProvidersEndpoint.cs b/src/Modules/SearchProviders/API/Endpoints/SearchProvidersEndpoint.cs similarity index 95% rename from src/Modules/Search/API/Endpoints/SearchProvidersEndpoint.cs rename to src/Modules/SearchProviders/API/Endpoints/SearchProvidersEndpoint.cs index e2f1d7b13..814616eb9 100644 --- a/src/Modules/Search/API/Endpoints/SearchProvidersEndpoint.cs +++ b/src/Modules/SearchProviders/API/Endpoints/SearchProvidersEndpoint.cs @@ -1,6 +1,6 @@ -using MeAjudaAi.Modules.Search.Application.DTOs; -using MeAjudaAi.Modules.Search.Application.Queries; -using MeAjudaAi.Modules.Search.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Application.DTOs; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; using MeAjudaAi.Shared.Contracts; using MeAjudaAi.Shared.Endpoints; using MeAjudaAi.Shared.Functional; @@ -10,7 +10,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; -namespace MeAjudaAi.Modules.Search.API.Endpoints; +namespace MeAjudaAi.Modules.SearchProviders.API.Endpoints; /// /// Endpoint para buscar provedores de serviço por localização e critérios. diff --git a/src/Modules/Search/API/Extensions.cs b/src/Modules/SearchProviders/API/Extensions.cs similarity index 62% rename from src/Modules/Search/API/Extensions.cs rename to src/Modules/SearchProviders/API/Extensions.cs index 5c20aeef1..c1bce5d06 100644 --- a/src/Modules/Search/API/Extensions.cs +++ b/src/Modules/SearchProviders/API/Extensions.cs @@ -1,34 +1,34 @@ -using MeAjudaAi.Modules.Search.API.Endpoints; -using MeAjudaAi.Modules.Search.Application; -using MeAjudaAi.Modules.Search.Infrastructure; +using MeAjudaAi.Modules.SearchProviders.API.Endpoints; +using MeAjudaAi.Modules.SearchProviders.Application; +using MeAjudaAi.Modules.SearchProviders.Infrastructure; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -namespace MeAjudaAi.Modules.Search.API; +namespace MeAjudaAi.Modules.SearchProviders.API; /// -/// Extensões em nível de módulo para registrar o módulo completo de Search & Discovery. +/// Extensões em nível de módulo para registrar o módulo completo de SearchProviders. /// public static class ModuleExtensions { /// - /// Registra todos os serviços do módulo Search (Domain, Application, Infrastructure, API). + /// Registra todos os serviços do módulo SearchProviders (Domain, Application, Infrastructure, API). /// /// A coleção de serviços. /// A configuração para ler strings de conexão e configurações. /// A coleção de serviços para encadeamento. - public static IServiceCollection AddSearchModule( + public static IServiceCollection AddSearchProvidersModule( this IServiceCollection services, IConfiguration configuration) { // Domain layer não tem dependências externas para registrar // Application layer - services.AddSearchApplication(); + services.AddSearchProvidersApplication(); // Infrastructure layer (requer configuration para conexão do BD) - services.AddSearchInfrastructure(configuration); + services.AddSearchProvidersInfrastructure(configuration); // API layer - sem serviços adicionais para registrar @@ -36,11 +36,11 @@ public static IServiceCollection AddSearchModule( } /// - /// Mapeia todos os endpoints do módulo Search. + /// Mapeia todos os endpoints do módulo SearchProviders. /// /// O construtor de rotas de endpoint. /// O construtor de rotas de endpoint para encadeamento. - public static IEndpointRouteBuilder UseSearchModule(this IEndpointRouteBuilder app) + public static IEndpointRouteBuilder UseSearchProvidersModule(this IEndpointRouteBuilder app) { SearchProvidersEndpoint.Map(app); return app; diff --git a/src/Modules/Search/API/MeAjudaAi.Modules.Search.API.csproj b/src/Modules/SearchProviders/API/MeAjudaAi.Modules.SearchProviders.API.csproj similarity index 79% rename from src/Modules/Search/API/MeAjudaAi.Modules.Search.API.csproj rename to src/Modules/SearchProviders/API/MeAjudaAi.Modules.SearchProviders.API.csproj index 4d60410e0..f5c9c096f 100644 --- a/src/Modules/Search/API/MeAjudaAi.Modules.Search.API.csproj +++ b/src/Modules/SearchProviders/API/MeAjudaAi.Modules.SearchProviders.API.csproj @@ -2,7 +2,7 @@ net9.0 - MeAjudaAi.Modules.Search.API + MeAjudaAi.Modules.SearchProviders.API Library @@ -14,8 +14,8 @@ - - + + diff --git a/src/Modules/Search/Application/DTOs/LocationDto.cs b/src/Modules/SearchProviders/Application/DTOs/LocationDto.cs similarity index 92% rename from src/Modules/Search/Application/DTOs/LocationDto.cs rename to src/Modules/SearchProviders/Application/DTOs/LocationDto.cs index f52b3e1f2..7268d8296 100644 --- a/src/Modules/Search/Application/DTOs/LocationDto.cs +++ b/src/Modules/SearchProviders/Application/DTOs/LocationDto.cs @@ -1,6 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace MeAjudaAi.Modules.Search.Application.DTOs; +namespace MeAjudaAi.Modules.SearchProviders.Application.DTOs; /// /// DTO representing geographic coordinates. diff --git a/src/Modules/Search/Application/DTOs/PagedSearchResultDto.cs b/src/Modules/SearchProviders/Application/DTOs/PagedSearchResultDto.cs similarity index 95% rename from src/Modules/Search/Application/DTOs/PagedSearchResultDto.cs rename to src/Modules/SearchProviders/Application/DTOs/PagedSearchResultDto.cs index 5d6c1bcac..bc898c402 100644 --- a/src/Modules/Search/Application/DTOs/PagedSearchResultDto.cs +++ b/src/Modules/SearchProviders/Application/DTOs/PagedSearchResultDto.cs @@ -1,4 +1,4 @@ -namespace MeAjudaAi.Modules.Search.Application.DTOs; +namespace MeAjudaAi.Modules.SearchProviders.Application.DTOs; /// /// DTO representando resultados de busca paginados. diff --git a/src/Modules/Search/Application/DTOs/SearchableProviderDto.cs b/src/Modules/SearchProviders/Application/DTOs/SearchableProviderDto.cs similarity index 93% rename from src/Modules/Search/Application/DTOs/SearchableProviderDto.cs rename to src/Modules/SearchProviders/Application/DTOs/SearchableProviderDto.cs index 6baf85a0f..0d2e0392d 100644 --- a/src/Modules/Search/Application/DTOs/SearchableProviderDto.cs +++ b/src/Modules/SearchProviders/Application/DTOs/SearchableProviderDto.cs @@ -1,6 +1,6 @@ -using MeAjudaAi.Modules.Search.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; -namespace MeAjudaAi.Modules.Search.Application.DTOs; +namespace MeAjudaAi.Modules.SearchProviders.Application.DTOs; /// /// DTO representando um provedor pesquisável nos resultados de busca. diff --git a/src/Modules/Search/Application/Extensions.cs b/src/Modules/SearchProviders/Application/Extensions.cs similarity index 65% rename from src/Modules/Search/Application/Extensions.cs rename to src/Modules/SearchProviders/Application/Extensions.cs index 020b4baf4..0bc4a94ac 100644 --- a/src/Modules/Search/Application/Extensions.cs +++ b/src/Modules/SearchProviders/Application/Extensions.cs @@ -1,24 +1,24 @@ using FluentValidation; -using MeAjudaAi.Modules.Search.Application.DTOs; -using MeAjudaAi.Modules.Search.Application.ModuleApi; -using MeAjudaAi.Modules.Search.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Application.DTOs; +using MeAjudaAi.Modules.SearchProviders.Application.ModuleApi; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; using MeAjudaAi.Shared.Contracts; using MeAjudaAi.Shared.Contracts.Modules.Search; using MeAjudaAi.Shared.Functional; using MeAjudaAi.Shared.Queries; using Microsoft.Extensions.DependencyInjection; -namespace MeAjudaAi.Modules.Search.Application; +namespace MeAjudaAi.Modules.SearchProviders.Application; /// -/// Métodos de extensão para registrar serviços da camada de Application do Search. +/// Métodos de extensão para registrar serviços da camada de Application do SearchProviders. /// public static class Extensions { /// - /// Registra serviços da camada de Application do Search. + /// Registra serviços da camada de Application do SearchProviders. /// - public static IServiceCollection AddSearchApplication(this IServiceCollection services) + public static IServiceCollection AddSearchProvidersApplication(this IServiceCollection services) { // Registrar query handlers services.AddScoped>>, Handlers.SearchProvidersQueryHandler>(); diff --git a/src/Modules/Search/Application/Handlers/SearchProvidersQueryHandler.cs b/src/Modules/SearchProviders/Application/Handlers/SearchProvidersQueryHandler.cs similarity index 91% rename from src/Modules/Search/Application/Handlers/SearchProvidersQueryHandler.cs rename to src/Modules/SearchProviders/Application/Handlers/SearchProvidersQueryHandler.cs index 17631a0fb..d5725a78c 100644 --- a/src/Modules/Search/Application/Handlers/SearchProvidersQueryHandler.cs +++ b/src/Modules/SearchProviders/Application/Handlers/SearchProvidersQueryHandler.cs @@ -1,14 +1,14 @@ -using MeAjudaAi.Modules.Search.Application.DTOs; -using MeAjudaAi.Modules.Search.Application.Queries; -using MeAjudaAi.Modules.Search.Domain.Repositories; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Application.DTOs; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Domain.Repositories; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; using MeAjudaAi.Shared.Contracts; using MeAjudaAi.Shared.Functional; using MeAjudaAi.Shared.Geolocation; using MeAjudaAi.Shared.Queries; using Microsoft.Extensions.Logging; -namespace MeAjudaAi.Modules.Search.Application.Handlers; +namespace MeAjudaAi.Modules.SearchProviders.Application.Handlers; /// /// Handler for searching providers based on location and criteria. diff --git a/src/Modules/Search/Application/MeAjudaAi.Modules.Search.Application.csproj b/src/Modules/SearchProviders/Application/MeAjudaAi.Modules.SearchProviders.Application.csproj similarity index 73% rename from src/Modules/Search/Application/MeAjudaAi.Modules.Search.Application.csproj rename to src/Modules/SearchProviders/Application/MeAjudaAi.Modules.SearchProviders.Application.csproj index e24977f76..c427cf3d4 100644 --- a/src/Modules/Search/Application/MeAjudaAi.Modules.Search.Application.csproj +++ b/src/Modules/SearchProviders/Application/MeAjudaAi.Modules.SearchProviders.Application.csproj @@ -2,12 +2,12 @@ net9.0 - MeAjudaAi.Modules.Search.Application + MeAjudaAi.Modules.SearchProviders.Application - + diff --git a/src/Modules/Search/Application/ModuleApi/SearchModuleApi.cs b/src/Modules/SearchProviders/Application/ModuleApi/SearchModuleApi.cs similarity index 86% rename from src/Modules/Search/Application/ModuleApi/SearchModuleApi.cs rename to src/Modules/SearchProviders/Application/ModuleApi/SearchModuleApi.cs index e03b30574..57c531d0d 100644 --- a/src/Modules/Search/Application/ModuleApi/SearchModuleApi.cs +++ b/src/Modules/SearchProviders/Application/ModuleApi/SearchModuleApi.cs @@ -1,6 +1,6 @@ -using MeAjudaAi.Modules.Search.Application.DTOs; -using MeAjudaAi.Modules.Search.Application.Queries; -using MeAjudaAi.Modules.Search.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Application.DTOs; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; using MeAjudaAi.Shared.Contracts; using MeAjudaAi.Shared.Contracts.Modules; using MeAjudaAi.Shared.Contracts.Modules.Search; @@ -9,10 +9,10 @@ using MeAjudaAi.Shared.Queries; using Microsoft.Extensions.Logging; -namespace MeAjudaAi.Modules.Search.Application.ModuleApi; +namespace MeAjudaAi.Modules.SearchProviders.Application.ModuleApi; /// -/// Implementação da API pública do módulo Search para outros módulos. +/// Implementação da API pública do módulo SearchProviders para outros módulos. /// [ModuleApi(ModuleMetadata.Name, ModuleMetadata.Version)] public sealed class SearchModuleApi( @@ -21,7 +21,7 @@ public sealed class SearchModuleApi( { private static class ModuleMetadata { - public const string Name = "Search"; + public const string Name = "SearchProviders"; public const string Version = "1.0"; } @@ -32,7 +32,7 @@ public async Task IsAvailableAsync(CancellationToken cancellationToken = d { try { - logger.LogDebug("Checking Search module availability"); + logger.LogDebug("Checking SearchProviders module availability"); // Teste básico: fazer uma busca com coordenadas válidas e radius pequeno var testResult = await SearchProvidersAsync( @@ -46,22 +46,22 @@ public async Task IsAvailableAsync(CancellationToken cancellationToken = d // Módulo está disponível se conseguiu executar a busca (mesmo que retorne 0 resultados) if (testResult.IsSuccess) { - logger.LogDebug("Search module is available and healthy"); + logger.LogDebug("SearchProviders module is available and healthy"); } else { - logger.LogWarning("Search module test query failed"); + logger.LogWarning("SearchProviders module test query failed"); } return testResult.IsSuccess; } catch (OperationCanceledException) { - logger.LogDebug("Search module availability check was cancelled"); + logger.LogDebug("SearchProviders module availability check was cancelled"); throw; } catch (Exception ex) { - logger.LogError(ex, "Error checking Search module availability"); + logger.LogError(ex, "Error checking SearchProviders module availability"); return false; } } diff --git a/src/Modules/Search/Application/Queries/SearchProvidersQuery.cs b/src/Modules/SearchProviders/Application/Queries/SearchProvidersQuery.cs similarity index 91% rename from src/Modules/Search/Application/Queries/SearchProvidersQuery.cs rename to src/Modules/SearchProviders/Application/Queries/SearchProvidersQuery.cs index 5b74f40d4..dab1d2a7c 100644 --- a/src/Modules/Search/Application/Queries/SearchProvidersQuery.cs +++ b/src/Modules/SearchProviders/Application/Queries/SearchProvidersQuery.cs @@ -1,11 +1,11 @@ using System.Globalization; -using MeAjudaAi.Modules.Search.Application.DTOs; -using MeAjudaAi.Modules.Search.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Application.DTOs; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; using MeAjudaAi.Shared.Contracts; using MeAjudaAi.Shared.Functional; using MeAjudaAi.Shared.Queries; -namespace MeAjudaAi.Modules.Search.Application.Queries; +namespace MeAjudaAi.Modules.SearchProviders.Application.Queries; /// /// Query to search for providers based on location, services, and other criteria. diff --git a/src/Modules/Search/Application/Validators/SearchProvidersQueryValidator.cs b/src/Modules/SearchProviders/Application/Validators/SearchProvidersQueryValidator.cs similarity index 90% rename from src/Modules/Search/Application/Validators/SearchProvidersQueryValidator.cs rename to src/Modules/SearchProviders/Application/Validators/SearchProvidersQueryValidator.cs index ea348ad93..8b1d620d2 100644 --- a/src/Modules/Search/Application/Validators/SearchProvidersQueryValidator.cs +++ b/src/Modules/SearchProviders/Application/Validators/SearchProvidersQueryValidator.cs @@ -1,7 +1,7 @@ using FluentValidation; -using MeAjudaAi.Modules.Search.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; -namespace MeAjudaAi.Modules.Search.Application.Validators; +namespace MeAjudaAi.Modules.SearchProviders.Application.Validators; /// /// Validador para SearchProvidersQuery. diff --git a/src/Modules/Search/Domain/Entities/SearchableProvider.cs b/src/Modules/SearchProviders/Domain/Entities/SearchableProvider.cs similarity index 97% rename from src/Modules/Search/Domain/Entities/SearchableProvider.cs rename to src/Modules/SearchProviders/Domain/Entities/SearchableProvider.cs index 2df9f96fa..26d67c805 100644 --- a/src/Modules/Search/Domain/Entities/SearchableProvider.cs +++ b/src/Modules/SearchProviders/Domain/Entities/SearchableProvider.cs @@ -1,9 +1,9 @@ -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; using MeAjudaAi.Shared.Domain; using MeAjudaAi.Shared.Geolocation; -namespace MeAjudaAi.Modules.Search.Domain.Entities; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Entities; /// /// Modelo de leitura para busca de provedores. diff --git a/src/Modules/Search/Domain/Enums/ESubscriptionTier.cs b/src/Modules/SearchProviders/Domain/Enums/ESubscriptionTier.cs similarity index 92% rename from src/Modules/Search/Domain/Enums/ESubscriptionTier.cs rename to src/Modules/SearchProviders/Domain/Enums/ESubscriptionTier.cs index 6d7e48630..85f60822b 100644 --- a/src/Modules/Search/Domain/Enums/ESubscriptionTier.cs +++ b/src/Modules/SearchProviders/Domain/Enums/ESubscriptionTier.cs @@ -1,4 +1,4 @@ -namespace MeAjudaAi.Modules.Search.Domain.Enums; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Enums; /// /// Representa o tier de assinatura de um provedor. diff --git a/src/Modules/Search/Domain/Enums/README.md b/src/Modules/SearchProviders/Domain/Enums/README.md similarity index 100% rename from src/Modules/Search/Domain/Enums/README.md rename to src/Modules/SearchProviders/Domain/Enums/README.md diff --git a/src/Modules/Search/Domain/Events/SearchableProviderIndexedDomainEvent.cs b/src/Modules/SearchProviders/Domain/Events/SearchableProviderIndexedDomainEvent.cs similarity index 86% rename from src/Modules/Search/Domain/Events/SearchableProviderIndexedDomainEvent.cs rename to src/Modules/SearchProviders/Domain/Events/SearchableProviderIndexedDomainEvent.cs index 910c585be..868263002 100644 --- a/src/Modules/Search/Domain/Events/SearchableProviderIndexedDomainEvent.cs +++ b/src/Modules/SearchProviders/Domain/Events/SearchableProviderIndexedDomainEvent.cs @@ -1,6 +1,6 @@ using MeAjudaAi.Shared.Events; -namespace MeAjudaAi.Modules.Search.Domain.Events; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Events; /// /// Evento de domínio disparado quando uma entrada de provedor pesquisável é criada. diff --git a/src/Modules/Search/Domain/Events/SearchableProviderRemovedDomainEvent.cs b/src/Modules/SearchProviders/Domain/Events/SearchableProviderRemovedDomainEvent.cs similarity index 83% rename from src/Modules/Search/Domain/Events/SearchableProviderRemovedDomainEvent.cs rename to src/Modules/SearchProviders/Domain/Events/SearchableProviderRemovedDomainEvent.cs index 3d29df46a..6f73e56f2 100644 --- a/src/Modules/Search/Domain/Events/SearchableProviderRemovedDomainEvent.cs +++ b/src/Modules/SearchProviders/Domain/Events/SearchableProviderRemovedDomainEvent.cs @@ -1,6 +1,6 @@ using MeAjudaAi.Shared.Events; -namespace MeAjudaAi.Modules.Search.Domain.Events; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Events; /// /// Evento de domínio disparado quando um provedor pesquisável é removido do índice. diff --git a/src/Modules/Search/Domain/Events/SearchableProviderUpdatedDomainEvent.cs b/src/Modules/SearchProviders/Domain/Events/SearchableProviderUpdatedDomainEvent.cs similarity index 84% rename from src/Modules/Search/Domain/Events/SearchableProviderUpdatedDomainEvent.cs rename to src/Modules/SearchProviders/Domain/Events/SearchableProviderUpdatedDomainEvent.cs index d239ac636..fcbeef8ba 100644 --- a/src/Modules/Search/Domain/Events/SearchableProviderUpdatedDomainEvent.cs +++ b/src/Modules/SearchProviders/Domain/Events/SearchableProviderUpdatedDomainEvent.cs @@ -1,6 +1,6 @@ using MeAjudaAi.Shared.Events; -namespace MeAjudaAi.Modules.Search.Domain.Events; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Events; /// /// Evento de domínio disparado quando as informações de um provedor pesquisável são atualizadas. diff --git a/src/Modules/Search/Domain/MeAjudaAi.Modules.Search.Domain.csproj b/src/Modules/SearchProviders/Domain/MeAjudaAi.Modules.SearchProviders.Domain.csproj similarity index 75% rename from src/Modules/Search/Domain/MeAjudaAi.Modules.Search.Domain.csproj rename to src/Modules/SearchProviders/Domain/MeAjudaAi.Modules.SearchProviders.Domain.csproj index 981acb56d..f471ed7c5 100644 --- a/src/Modules/Search/Domain/MeAjudaAi.Modules.Search.Domain.csproj +++ b/src/Modules/SearchProviders/Domain/MeAjudaAi.Modules.SearchProviders.Domain.csproj @@ -2,7 +2,7 @@ net9.0 - MeAjudaAi.Modules.Search.Domain + MeAjudaAi.Modules.SearchProviders.Domain diff --git a/src/Modules/Search/Domain/Models/SearchResult.cs b/src/Modules/SearchProviders/Domain/Models/SearchResult.cs similarity index 92% rename from src/Modules/Search/Domain/Models/SearchResult.cs rename to src/Modules/SearchProviders/Domain/Models/SearchResult.cs index 1a75a50bf..e082590b5 100644 --- a/src/Modules/Search/Domain/Models/SearchResult.cs +++ b/src/Modules/SearchProviders/Domain/Models/SearchResult.cs @@ -1,6 +1,6 @@ -using MeAjudaAi.Modules.Search.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; -namespace MeAjudaAi.Modules.Search.Domain.Models; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Models; /// /// Representa o resultado de uma operação de busca de provedores. diff --git a/src/Modules/Search/Domain/Properties/AssemblyInfo.cs b/src/Modules/SearchProviders/Domain/Properties/AssemblyInfo.cs similarity index 81% rename from src/Modules/Search/Domain/Properties/AssemblyInfo.cs rename to src/Modules/SearchProviders/Domain/Properties/AssemblyInfo.cs index 2a0e9e92e..d02974458 100644 --- a/src/Modules/Search/Domain/Properties/AssemblyInfo.cs +++ b/src/Modules/SearchProviders/Domain/Properties/AssemblyInfo.cs @@ -2,10 +2,10 @@ // Permitir que a camada de Infrastructure acesse membros internal // Necessário para o método Reconstitute usado pelo repositório híbrido (Dapper) -[assembly: InternalsVisibleTo("MeAjudaAi.Modules.Search.Infrastructure")] +[assembly: InternalsVisibleTo("MeAjudaAi.Modules.SearchProviders.Infrastructure")] // Permitir que testes acessem membros internal -[assembly: InternalsVisibleTo("MeAjudaAi.Modules.Search.Tests")] +[assembly: InternalsVisibleTo("MeAjudaAi.Modules.SearchProviders.Tests")] // Permitir que Moq/Castle.DynamicProxy crie proxies de membros internal [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] diff --git a/src/Modules/Search/Domain/Repositories/ISearchableProviderRepository.cs b/src/Modules/SearchProviders/Domain/Repositories/ISearchableProviderRepository.cs similarity index 90% rename from src/Modules/Search/Domain/Repositories/ISearchableProviderRepository.cs rename to src/Modules/SearchProviders/Domain/Repositories/ISearchableProviderRepository.cs index eec7359b3..8d0988641 100644 --- a/src/Modules/Search/Domain/Repositories/ISearchableProviderRepository.cs +++ b/src/Modules/SearchProviders/Domain/Repositories/ISearchableProviderRepository.cs @@ -1,10 +1,10 @@ -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.Models; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.Models; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; using MeAjudaAi.Shared.Geolocation; -namespace MeAjudaAi.Modules.Search.Domain.Repositories; +namespace MeAjudaAi.Modules.SearchProviders.Domain.Repositories; /// /// Repositório para o agregado SearchableProvider. diff --git a/src/Modules/Search/Domain/ValueObjects/SearchableProviderId.cs b/src/Modules/SearchProviders/Domain/ValueObjects/SearchableProviderId.cs similarity index 93% rename from src/Modules/Search/Domain/ValueObjects/SearchableProviderId.cs rename to src/Modules/SearchProviders/Domain/ValueObjects/SearchableProviderId.cs index dfc32e21d..5d458be91 100644 --- a/src/Modules/Search/Domain/ValueObjects/SearchableProviderId.cs +++ b/src/Modules/SearchProviders/Domain/ValueObjects/SearchableProviderId.cs @@ -1,7 +1,7 @@ using MeAjudaAi.Shared.Domain; using MeAjudaAi.Shared.Time; -namespace MeAjudaAi.Modules.Search.Domain.ValueObjects; +namespace MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; /// /// Identificador único para SearchableProvider usando o padrão Strongly-Typed ID. diff --git a/src/Modules/Search/Infrastructure/Extensions.cs b/src/Modules/SearchProviders/Infrastructure/Extensions.cs similarity index 83% rename from src/Modules/Search/Infrastructure/Extensions.cs rename to src/Modules/SearchProviders/Infrastructure/Extensions.cs index fe0484327..72f458291 100644 --- a/src/Modules/Search/Infrastructure/Extensions.cs +++ b/src/Modules/SearchProviders/Infrastructure/Extensions.cs @@ -1,22 +1,22 @@ -using MeAjudaAi.Modules.Search.Domain.Repositories; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence.Repositories; +using MeAjudaAi.Modules.SearchProviders.Domain.Repositories; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.Repositories; using MeAjudaAi.Shared.Database; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -namespace MeAjudaAi.Modules.Search.Infrastructure; +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure; /// -/// Métodos de extensão para registrar serviços da camada de Infrastructure do Search. +/// Métodos de extensão para registrar serviços da camada de Infrastructure do SearchProviders. /// public static class Extensions { /// - /// Registra serviços da camada de Infrastructure do Search. + /// Registra serviços da camada de Infrastructure do SearchProviders. /// - public static IServiceCollection AddSearchInfrastructure( + public static IServiceCollection AddSearchProvidersInfrastructure( this IServiceCollection services, IConfiguration configuration) { @@ -32,7 +32,7 @@ public static IServiceCollection AddSearchInfrastructure( "Database connection string not found. Tried: 'DefaultConnection', 'Search', 'meajudaai-db'. " + "Please configure one of these connection strings in appsettings.json or environment variables."); - services.AddDbContext((serviceProvider, options) => + services.AddDbContext((serviceProvider, options) => { options.UseNpgsql(connectionString, npgsqlOptions => { diff --git a/src/Modules/Search/Infrastructure/MeAjudaAi.Modules.Search.Infrastructure.csproj b/src/Modules/SearchProviders/Infrastructure/MeAjudaAi.Modules.SearchProviders.Infrastructure.csproj similarity index 85% rename from src/Modules/Search/Infrastructure/MeAjudaAi.Modules.Search.Infrastructure.csproj rename to src/Modules/SearchProviders/Infrastructure/MeAjudaAi.Modules.SearchProviders.Infrastructure.csproj index fdf9eec1b..085cc5044 100644 --- a/src/Modules/Search/Infrastructure/MeAjudaAi.Modules.Search.Infrastructure.csproj +++ b/src/Modules/SearchProviders/Infrastructure/MeAjudaAi.Modules.SearchProviders.Infrastructure.csproj @@ -2,7 +2,7 @@ net9.0 - MeAjudaAi.Modules.Search.Infrastructure + MeAjudaAi.Modules.SearchProviders.Infrastructure @@ -18,8 +18,8 @@ - - + + diff --git a/src/Modules/Search/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs similarity index 93% rename from src/Modules/Search/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs index 3845a6dd3..d23ec566f 100644 --- a/src/Modules/Search/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/Configurations/SearchableProviderConfiguration.cs @@ -1,12 +1,12 @@ -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; using MeAjudaAi.Shared.Geolocation; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using NetTopologySuite.Geometries; -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.Configurations; +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.Configurations; /// /// Configuração do EF Core para a entidade SearchableProvider. diff --git a/src/Modules/Search/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs similarity index 91% rename from src/Modules/Search/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs index 514323c69..500f444ee 100644 --- a/src/Modules/Search/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/DTOs/ProviderSearchResultDto.cs @@ -1,4 +1,4 @@ -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.DTOs; +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.DTOs; /// /// DTO para mapear resultados da query espacial Dapper/PostGIS. diff --git a/src/Modules/Search/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.Designer.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.Designer.cs similarity index 93% rename from src/Modules/Search/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.Designer.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.Designer.cs index 8d4f6b11a..ccf19edf4 100644 --- a/src/Modules/Search/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.Designer.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.Designer.cs @@ -1,6 +1,6 @@ -// +// using System; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; @@ -10,9 +10,9 @@ #nullable disable -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.Migrations +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.Migrations { - [DbContext(typeof(SearchDbContext))] + [DbContext(typeof(SearchProvidersDbContext))] [Migration("20251114205434_InitialCreate")] partial class InitialCreate { @@ -28,7 +28,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis"); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("MeAjudaAi.Modules.Search.Domain.Entities.SearchableProvider", b => + modelBuilder.Entity("MeAjudaAi.Modules.SearchProviders.Domain.Entities.SearchableProvider", b => { b.Property("Id") .HasColumnType("uuid") diff --git a/src/Modules/Search/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.cs similarity index 98% rename from src/Modules/Search/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.cs index f5f5221e8..b68271366 100644 --- a/src/Modules/Search/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/20251114205434_InitialCreate.cs @@ -4,7 +4,7 @@ #nullable disable -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.Migrations +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.Migrations { /// public partial class InitialCreate : Migration diff --git a/src/Modules/Search/Infrastructure/Persistence/Migrations/SearchDbContextModelSnapshot.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/SearchDbContextModelSnapshot.cs similarity index 92% rename from src/Modules/Search/Infrastructure/Persistence/Migrations/SearchDbContextModelSnapshot.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/SearchDbContextModelSnapshot.cs index dc5e872bc..637009937 100644 --- a/src/Modules/Search/Infrastructure/Persistence/Migrations/SearchDbContextModelSnapshot.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/Migrations/SearchDbContextModelSnapshot.cs @@ -1,6 +1,6 @@ -// +// using System; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -9,10 +9,10 @@ #nullable disable -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.Migrations +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.Migrations { - [DbContext(typeof(SearchDbContext))] - partial class SearchDbContextModelSnapshot : ModelSnapshot + [DbContext(typeof(SearchProvidersDbContext))] + partial class SearchProvidersDbContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { @@ -25,7 +25,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis"); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("MeAjudaAi.Modules.Search.Domain.Entities.SearchableProvider", b => + modelBuilder.Entity("MeAjudaAi.Modules.SearchProviders.Domain.Entities.SearchableProvider", b => { b.Property("Id") .HasColumnType("uuid") diff --git a/src/Modules/Search/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs similarity index 95% rename from src/Modules/Search/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs index 53c2df076..0a85d70a1 100644 --- a/src/Modules/Search/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/Repositories/SearchableProviderRepository.cs @@ -1,15 +1,15 @@ -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.Models; -using MeAjudaAi.Modules.Search.Domain.Repositories; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence.DTOs; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.Models; +using MeAjudaAi.Modules.SearchProviders.Domain.Repositories; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.DTOs; using MeAjudaAi.Shared.Database; using MeAjudaAi.Shared.Geolocation; using Microsoft.EntityFrameworkCore; using NetTopologySuite.Geometries; -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.Repositories; +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence.Repositories; /// /// Implementação de repositório para SearchableProvider. @@ -47,7 +47,7 @@ namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence.Repositories; /// - Mantém todas as invariantes e validações do domínio /// public sealed class SearchableProviderRepository( - SearchDbContext context, + SearchProvidersDbContext context, IDapperConnection dapper) : ISearchableProviderRepository { public async Task GetByIdAsync(SearchableProviderId id, CancellationToken cancellationToken = default) diff --git a/src/Modules/Search/Infrastructure/Persistence/SearchDbContext.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/SearchProvidersDbContext.cs similarity index 81% rename from src/Modules/Search/Infrastructure/Persistence/SearchDbContext.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/SearchProvidersDbContext.cs index 1e1711f0a..14ceb0315 100644 --- a/src/Modules/Search/Infrastructure/Persistence/SearchDbContext.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/SearchProvidersDbContext.cs @@ -1,28 +1,28 @@ using System.Reflection; -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; using MeAjudaAi.Shared.Database; using MeAjudaAi.Shared.Domain; using MeAjudaAi.Shared.Events; using Microsoft.EntityFrameworkCore; -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence; +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; /// /// Contexto de banco de dados para o módulo Search. /// Usa a extensão PostGIS para consultas geoespaciais. /// -public class SearchDbContext : BaseDbContext +public class SearchProvidersDbContext : BaseDbContext { public DbSet SearchableProviders => Set(); // Constructor for design-time (migrations) - public SearchDbContext(DbContextOptions options) : base(options) + public SearchProvidersDbContext(DbContextOptions options) : base(options) { } // Constructor for runtime with DI - public SearchDbContext(DbContextOptions options, IDomainEventProcessor domainEventProcessor) + public SearchProvidersDbContext(DbContextOptions options, IDomainEventProcessor domainEventProcessor) : base(options, domainEventProcessor) { } diff --git a/src/Modules/Search/Infrastructure/Persistence/SearchDbContextFactory.cs b/src/Modules/SearchProviders/Infrastructure/Persistence/SearchProvidersDbContextFactory.cs similarity index 70% rename from src/Modules/Search/Infrastructure/Persistence/SearchDbContextFactory.cs rename to src/Modules/SearchProviders/Infrastructure/Persistence/SearchProvidersDbContextFactory.cs index 336869fc3..cfb76b048 100644 --- a/src/Modules/Search/Infrastructure/Persistence/SearchDbContextFactory.cs +++ b/src/Modules/SearchProviders/Infrastructure/Persistence/SearchProvidersDbContextFactory.cs @@ -2,16 +2,16 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; -namespace MeAjudaAi.Modules.Search.Infrastructure.Persistence; +namespace MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; /// -/// Fábrica para criar instâncias de SearchDbContext em tempo de design (para migrações). +/// Fábrica para criar instâncias de SearchProvidersDbContext em tempo de design (para migrações). /// -public class SearchDbContextFactory : IDesignTimeDbContextFactory +public class SearchProvidersDbContextFactory : IDesignTimeDbContextFactory { - public SearchDbContext CreateDbContext(string[] args) + public SearchProvidersDbContext CreateDbContext(string[] args) { - var optionsBuilder = new DbContextOptionsBuilder(); + var optionsBuilder = new DbContextOptionsBuilder(); // Read connection string from environment variable var connectionString = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING") @@ -28,7 +28,7 @@ public SearchDbContext CreateDbContext(string[] args) // Criar processador de eventos de domínio no-op para design-time var domainEventProcessor = new NoOpDomainEventProcessor(); - return new SearchDbContext(optionsBuilder.Options, domainEventProcessor); + return new SearchProvidersDbContext(optionsBuilder.Options, domainEventProcessor); } /// diff --git a/src/Modules/Search/Tests/Integration/SearchIntegrationTestBase.cs b/src/Modules/SearchProviders/Tests/Integration/SearchProvidersIntegrationTestBase.cs similarity index 90% rename from src/Modules/Search/Tests/Integration/SearchIntegrationTestBase.cs rename to src/Modules/SearchProviders/Tests/Integration/SearchProvidersIntegrationTestBase.cs index f2a085fef..fcfa45739 100644 --- a/src/Modules/Search/Tests/Integration/SearchIntegrationTestBase.cs +++ b/src/Modules/SearchProviders/Tests/Integration/SearchProvidersIntegrationTestBase.cs @@ -1,8 +1,8 @@ using System.Data.Common; -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; using MeAjudaAi.Shared.Database; using MeAjudaAi.Shared.Geolocation; using Microsoft.EntityFrameworkCore; @@ -10,19 +10,19 @@ using Microsoft.Extensions.Logging; using Testcontainers.PostgreSql; -namespace MeAjudaAi.Modules.Search.Tests.Integration; +namespace MeAjudaAi.Modules.SearchProviders.Tests.Integration; /// /// Classe base para testes de integração do módulo Search. /// Usa Testcontainers PostgreSQL com extensão PostGIS. /// -public abstract class SearchIntegrationTestBase : IAsyncLifetime +public abstract class SearchProvidersIntegrationTestBase : IAsyncLifetime { private PostgreSqlContainer? _container; private ServiceProvider? _serviceProvider; private readonly string _testClassId; - protected SearchIntegrationTestBase() + protected SearchProvidersIntegrationTestBase() { _testClassId = $"{GetType().Name}_{Guid.NewGuid():N}"; } @@ -55,7 +55,7 @@ public async ValueTask InitializeAsync() }); // Configurar DbContext com connection string do container - services.AddDbContext(options => + services.AddDbContext(options => { options.UseNpgsql( _container.GetConnectionString(), @@ -83,8 +83,8 @@ public async ValueTask InitializeAsync() services.AddScoped(); // Registrar repositório - services.AddScoped(); + services.AddScoped(); _serviceProvider = services.BuildServiceProvider(); @@ -97,7 +97,7 @@ public async ValueTask InitializeAsync() /// private async Task InitializeDatabaseAsync() { - var dbContext = _serviceProvider!.GetRequiredService(); + var dbContext = _serviceProvider!.GetRequiredService(); // Criar banco de dados await dbContext.Database.EnsureCreatedAsync(); @@ -203,7 +203,7 @@ protected SearchableProvider CreateTestSearchableProviderWithProviderId( /// protected async Task PersistSearchableProviderAsync(SearchableProvider provider) { - var dbContext = GetService(); + var dbContext = GetService(); await dbContext.SearchableProviders.AddAsync(provider); await dbContext.SaveChangesAsync(); return provider; @@ -214,7 +214,7 @@ protected async Task PersistSearchableProviderAsync(Searchab /// protected async Task CleanupDatabase() { - var dbContext = GetService(); + var dbContext = GetService(); try { diff --git a/src/Modules/Search/Tests/Integration/SearchableProviderRepositoryIntegrationTests.cs b/src/Modules/SearchProviders/Tests/Integration/SearchableProviderRepositoryIntegrationTests.cs similarity index 97% rename from src/Modules/Search/Tests/Integration/SearchableProviderRepositoryIntegrationTests.cs rename to src/Modules/SearchProviders/Tests/Integration/SearchableProviderRepositoryIntegrationTests.cs index 346336fa7..b91d2010b 100644 --- a/src/Modules/Search/Tests/Integration/SearchableProviderRepositoryIntegrationTests.cs +++ b/src/Modules/SearchProviders/Tests/Integration/SearchableProviderRepositoryIntegrationTests.cs @@ -1,19 +1,19 @@ using FluentAssertions; -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.Repositories; -using MeAjudaAi.Modules.Search.Infrastructure.Persistence; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.Repositories; +using MeAjudaAi.Modules.SearchProviders.Infrastructure.Persistence; using MeAjudaAi.Shared.Geolocation; using Microsoft.Extensions.DependencyInjection; -namespace MeAjudaAi.Modules.Search.Tests.Integration; +namespace MeAjudaAi.Modules.SearchProviders.Tests.Integration; /// /// Testes de integração para SearchableProviderRepository com PostGIS /// [Trait("Category", "Integration")] -[Trait("Module", "Search")] +[Trait("Module", "SearchProviders")] [Trait("Component", "Repository")] -public class SearchableProviderRepositoryIntegrationTests : SearchIntegrationTestBase +public class SearchableProviderRepositoryIntegrationTests : SearchProvidersIntegrationTestBase { [Fact] public async Task AddAsync_WithValidProvider_ShouldPersistToDatabase() @@ -21,7 +21,7 @@ public async Task AddAsync_WithValidProvider_ShouldPersistToDatabase() // Arrange await CleanupDatabase(); using var scope = CreateScope(); - var dbContext = scope.ServiceProvider.GetRequiredService(); + var dbContext = scope.ServiceProvider.GetRequiredService(); var repository = scope.ServiceProvider.GetRequiredService(); var provider = CreateTestSearchableProvider( diff --git a/src/Modules/Search/Tests/MeAjudaAi.Modules.Search.Tests.csproj b/src/Modules/SearchProviders/Tests/MeAjudaAi.Modules.SearchProviders.Tests.csproj similarity index 91% rename from src/Modules/Search/Tests/MeAjudaAi.Modules.Search.Tests.csproj rename to src/Modules/SearchProviders/Tests/MeAjudaAi.Modules.SearchProviders.Tests.csproj index 159181d31..d6b5c1ea9 100644 --- a/src/Modules/Search/Tests/MeAjudaAi.Modules.Search.Tests.csproj +++ b/src/Modules/SearchProviders/Tests/MeAjudaAi.Modules.SearchProviders.Tests.csproj @@ -37,10 +37,10 @@ - - - - + + + + diff --git a/src/Modules/Search/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs b/src/Modules/SearchProviders/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs similarity index 95% rename from src/Modules/Search/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs rename to src/Modules/SearchProviders/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs index 1b86f507f..020672491 100644 --- a/src/Modules/Search/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs +++ b/src/Modules/SearchProviders/Tests/Unit/Application/Handlers/SearchProvidersQueryHandlerTests.cs @@ -1,23 +1,23 @@ using FluentAssertions; -using MeAjudaAi.Modules.Search.Application.DTOs; -using MeAjudaAi.Modules.Search.Application.Handlers; -using MeAjudaAi.Modules.Search.Application.Queries; -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.Enums; -using MeAjudaAi.Modules.Search.Domain.Models; -using MeAjudaAi.Modules.Search.Domain.Repositories; -using MeAjudaAi.Modules.Search.Domain.ValueObjects; +using MeAjudaAi.Modules.SearchProviders.Application.DTOs; +using MeAjudaAi.Modules.SearchProviders.Application.Handlers; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.Models; +using MeAjudaAi.Modules.SearchProviders.Domain.Repositories; +using MeAjudaAi.Modules.SearchProviders.Domain.ValueObjects; using MeAjudaAi.Shared.Geolocation; using Microsoft.Extensions.Logging; using Moq; -namespace MeAjudaAi.Modules.Search.Tests.Unit.Application.Handlers; +namespace MeAjudaAi.Modules.SearchProviders.Tests.Unit.Application.Handlers; /// /// Testes unitários para SearchProvidersQueryHandler /// [Trait("Category", "Unit")] -[Trait("Module", "Search")] +[Trait("Module", "SearchProviders")] [Trait("Component", "QueryHandler")] public class SearchProvidersQueryHandlerTests { diff --git a/src/Modules/Search/Tests/Unit/Application/Queries/SearchProvidersQueryTests.cs b/src/Modules/SearchProviders/Tests/Unit/Application/Queries/SearchProvidersQueryTests.cs similarity index 95% rename from src/Modules/Search/Tests/Unit/Application/Queries/SearchProvidersQueryTests.cs rename to src/Modules/SearchProviders/Tests/Unit/Application/Queries/SearchProvidersQueryTests.cs index d81b5967b..ac18e5cf8 100644 --- a/src/Modules/Search/Tests/Unit/Application/Queries/SearchProvidersQueryTests.cs +++ b/src/Modules/SearchProviders/Tests/Unit/Application/Queries/SearchProvidersQueryTests.cs @@ -1,13 +1,13 @@ using FluentAssertions; -using MeAjudaAi.Modules.Search.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; -namespace MeAjudaAi.Modules.Search.Tests.Unit.Application.Queries; +namespace MeAjudaAi.Modules.SearchProviders.Tests.Unit.Application.Queries; /// /// Testes unitários para SearchProvidersQuery (ICacheableQuery) /// [Trait("Category", "Unit")] -[Trait("Module", "Search")] +[Trait("Module", "SearchProviders")] [Trait("Component", "Query")] public class SearchProvidersQueryTests { diff --git a/src/Modules/Search/Tests/Unit/Application/Validators/SearchProvidersQueryValidatorTests.cs b/src/Modules/SearchProviders/Tests/Unit/Application/Validators/SearchProvidersQueryValidatorTests.cs similarity index 96% rename from src/Modules/Search/Tests/Unit/Application/Validators/SearchProvidersQueryValidatorTests.cs rename to src/Modules/SearchProviders/Tests/Unit/Application/Validators/SearchProvidersQueryValidatorTests.cs index 93ebbf1c2..3bedcbcbd 100644 --- a/src/Modules/Search/Tests/Unit/Application/Validators/SearchProvidersQueryValidatorTests.cs +++ b/src/Modules/SearchProviders/Tests/Unit/Application/Validators/SearchProvidersQueryValidatorTests.cs @@ -1,15 +1,15 @@ using FluentAssertions; -using MeAjudaAi.Modules.Search.Application.Queries; -using MeAjudaAi.Modules.Search.Application.Validators; -using MeAjudaAi.Modules.Search.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Application.Queries; +using MeAjudaAi.Modules.SearchProviders.Application.Validators; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; -namespace MeAjudaAi.Modules.Search.Tests.Unit.Application.Validators; +namespace MeAjudaAi.Modules.SearchProviders.Tests.Unit.Application.Validators; /// /// Testes unitários para SearchProvidersQueryValidator /// [Trait("Category", "Unit")] -[Trait("Module", "Search")] +[Trait("Module", "SearchProviders")] [Trait("Component", "Validator")] public class SearchProvidersQueryValidatorTests { diff --git a/src/Modules/Search/Tests/Unit/Domain/Entities/SearchableProviderTests.cs b/src/Modules/SearchProviders/Tests/Unit/Domain/Entities/SearchableProviderTests.cs similarity index 97% rename from src/Modules/Search/Tests/Unit/Domain/Entities/SearchableProviderTests.cs rename to src/Modules/SearchProviders/Tests/Unit/Domain/Entities/SearchableProviderTests.cs index 627658f13..5aa843c32 100644 --- a/src/Modules/Search/Tests/Unit/Domain/Entities/SearchableProviderTests.cs +++ b/src/Modules/SearchProviders/Tests/Unit/Domain/Entities/SearchableProviderTests.cs @@ -1,15 +1,15 @@ using FluentAssertions; -using MeAjudaAi.Modules.Search.Domain.Entities; -using MeAjudaAi.Modules.Search.Domain.Enums; +using MeAjudaAi.Modules.SearchProviders.Domain.Entities; +using MeAjudaAi.Modules.SearchProviders.Domain.Enums; using MeAjudaAi.Shared.Geolocation; -namespace MeAjudaAi.Modules.Search.Tests.Unit.Domain.Entities; +namespace MeAjudaAi.Modules.SearchProviders.Tests.Unit.Domain.Entities; /// /// Testes unitários para SearchableProvider entity /// [Trait("Category", "Unit")] -[Trait("Module", "Search")] +[Trait("Module", "SearchProviders")] [Trait("Component", "Domain")] public class SearchableProviderTests {