Skip to content

Feat/refactor handlers use httpclientfactory#14

Open
9Queens wants to merge 17 commits into
Accepted-GR:mainfrom
9Queens:feat/refactor-handlers-use-httpclientfactory
Open

Feat/refactor handlers use httpclientfactory#14
9Queens wants to merge 17 commits into
Accepted-GR:mainfrom
9Queens:feat/refactor-handlers-use-httpclientfactory

Conversation

@9Queens

@9Queens 9Queens commented Jul 7, 2026

Copy link
Copy Markdown

Refactor CQRS handlers to use IHttpClientFactory for proper HTTP client management

  • Updated all query/command handlers to inject IHttpClientFactory instead of HttpClient
  • Configured named HttpClient "RestApiClient" with BaseAddress, timeout, and message handlers
  • Added Microsoft.Extensions.Http package to Application project
  • Updated unit tests to mock IHttpClientFactory with Moq
  • Simplified Infrastructure DI registration by removing explicit handler overrides
  • Fixed Docker runtime InvalidOperationException: BaseAddress must be set

Konstantinos Georgomitros added 17 commits July 5, 2026 13:09
…I config

- Replace per-instance HttpClient with typed HttpClient via IHttpClientFactory
- Remove BuildServiceProvider anti-pattern; accept IConfiguration in DefaultConfiguration
- Inject HttpClient into ProductsService and make JSON deserialization null-safe with logging
- Pass builder.Configuration into registration calls in Program.cs
- Add GetProductById/CreateProduct to IProductsService and ProductsService, exttending API endpoints, and include unit tests
- Test project added + ProductService tests added
- Add TokenService, AuthenticationDelegatingHandler, DI wiring and memory cache
- Attach Bearer token to typed HttpClients and add unit tests (token + handler)
- add PerformanceLoggingMiddleware Measure incoming request duration and log warnings when requests exceed configured threshold; support excluded paths.
- add HttpClientMetricsHandler Measure outgoing HttpClient call durations and emit structured metrics/warnings based on performance settings.
- register metrics handler and middleware Register HttpClientMetricsHandler and AuthenticationDelegatingHandler with typed HttpClients and add PerformanceLoggingMiddleware to pipeline.
- add unit tests for performance logging and metrics Add tests for slow incoming requests and slow outgoing HttpClient calls; add TestLogger helpers and console output for visibility.
 - move validators/mappers to Mapping/Validation
 - add upstream category mapper
 - DI helpers, injectable API validators
 - more unit tests.
- Multi-stage Dockerfile for optimized builds
- Docker Compose for dev/prod/test environments
- Fix TokenService HttpClient registration and auth payload
- Update API configuration for correct upstream paths
- Add Docker documentation
- GETTING_STARTED.md file added for the readers to start operating using docker
…oss the solution using MediatR library to improve separation of concerns and maintainability.

Architecture Changes:
- Replace service-based approach with CQRS handlers
- Introduce IMediator for centralized request handling
- Separate read operations (Queries) from write operations (Commands)

Added:
- MediatR package (v14.2.0) to Application layer
- Query handlers for Products (GetProducts, GetProductById)
- Query handlers for Categories (GetCategories, GetCategoryById)
- Command handlers for Products (CreateProduct)
- Command handlers for Categories (CreateCategory)
- Moved endpoint registration from Program.cs to feature-specific files:
  - ProductEndpoints.cs for product routes
  - CategoryEndpoints.cs for category routes
  - EndpointExtensions.cs with single MapVersionedEndpoints() entry point

- Updated tests to verify CQRS handlers instead of legacy services:
  - ProductsServiceTests → ProductQueryHandlerTests + ProductCommandHandlerTests
  - CategoriesServiceTests → CategoryQueryHandlerTests + CategoryCommandHandlerTests

- Removed legacy service layer (no longer used with CQRS):
  - Deleted ProductsService.cs, CategoriesService.cs
  - Deleted IProductsService.cs, ICategoriesService.cs
…nt management

- Updated all query/command handlers to inject IHttpClientFactory instead of HttpClient
- Configured named HttpClient "RestApiClient" with BaseAddress, timeout, and message handlers
- Added Microsoft.Extensions.Http package to Application project
- Updated unit tests to mock IHttpClientFactory with Moq
- Simplified Infrastructure DI registration by removing explicit handler overrides
- Fixed Docker runtime InvalidOperationException: BaseAddress must be set
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