Skip to content

Conversation

@ArdenHide
Copy link
Contributor

No description provided.

@ArdenHide ArdenHide requested a review from Copilot November 13, 2025 11:55
@ArdenHide ArdenHide linked an issue Nov 13, 2025 that may be closed by this pull request
@ArdenHide ArdenHide marked this pull request as ready for review November 13, 2025 11:55
@ArdenHide ArdenHide linked an issue Nov 13, 2025 that may be closed by this pull request
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR integrates the Polly library to add retry logic for HTTP calls and blockchain operations across the application. The retry mechanism is implemented via the IRetryExecutor interface from the Poolz.Finance.CSharp.Polly.Extensions package.

  • Added retry wrapper to GraphQL queries in Strapi client
  • Added retry wrapper to ERC20 token cache operations
  • Added retry wrapper to NFT supply range checks and pool info fetching

Reviewed Changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/MetaDataAPI/MetaDataAPI.csproj Adds the Polly extensions package dependency
src/MetaDataAPI/DefaultServiceProvider.cs Registers IRetryExecutor as a singleton service
src/MetaDataAPI/Services/Strapi/StrapiClient.cs Wraps GraphQL queries with retry logic using ExecuteAsync
src/MetaDataAPI/Services/Erc20/Erc20Provider.cs Wraps cache operations with retry logic using Execute
src/MetaDataAPI/Routing/Requests/GetMetadataRequestHandler.cs Wraps blockchain calls with retry logic and fixes error response parameter (bug introduced)
src/MetaDataAPI/Services/Http/FailureOnlyLoggingHandler.cs Renames constructor parameter from inner to innerHandler for clarity
tests/MetaDataAPI.Tests/Services/Erc20/Erc20ProviderTests.cs Updates test to mock the new IRetryExecutor dependency

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@github-actions
Copy link

Diagrams

Diagrams summary
URL PATH
include URL ./diagrams/include.puml
Env URL ./diagrams/src/MetaDataAPI/Env.puml
DefaultServiceProvider URL ./diagrams/src/MetaDataAPI/DefaultServiceProvider.puml
LambdaFunction URL ./diagrams/src/MetaDataAPI/LambdaFunction.puml
AssemblyInfo URL ./diagrams/src/MetaDataAPI/Properties/AssemblyInfo.puml
ChainInfo URL ./diagrams/src/MetaDataAPI/Services/ChainsInfo/ChainInfo.puml
IChainManager URL ./diagrams/src/MetaDataAPI/Services/ChainsInfo/IChainManager.puml
StrapiChainManager URL ./diagrams/src/MetaDataAPI/Services/ChainsInfo/StrapiChainManager.puml
HttpClientFactory URL ./diagrams/src/MetaDataAPI/Services/Http/HttpClientFactory.puml
Web3Factory URL ./diagrams/src/MetaDataAPI/Services/Http/Web3Factory.puml
FailureOnlyLoggingHandler URL ./diagrams/src/MetaDataAPI/Services/Http/FailureOnlyLoggingHandler.puml
IWeb3Factory URL ./diagrams/src/MetaDataAPI/Services/Http/IWeb3Factory.puml
IHttpClientFactory URL ./diagrams/src/MetaDataAPI/Services/Http/IHttpClientFactory.puml
Erc20Provider URL ./diagrams/src/MetaDataAPI/Services/Erc20/Erc20Provider.puml
IErc20Provider URL ./diagrams/src/MetaDataAPI/Services/Erc20/IErc20Provider.puml
Erc20Token URL ./diagrams/src/MetaDataAPI/Services/Erc20/Erc20Token.puml
IStrapiClient URL ./diagrams/src/MetaDataAPI/Services/Strapi/IStrapiClient.puml
StrapiGraphQLClient URL ./diagrams/src/MetaDataAPI/Services/Strapi/StrapiGraphQLClient.puml
StrapiClient URL ./diagrams/src/MetaDataAPI/Services/Strapi/StrapiClient.puml
StrapiDataResponse URL ./diagrams/src/MetaDataAPI/Services/Strapi/Models/StrapiDataResponse.puml
HeadlessChromiumPuppeteerLauncher URL ./diagrams/src/MetaDataAPI/Services/PuppeteerSharp/HeadlessChromiumPuppeteerLauncher.puml
ChromiumExtractor URL ./diagrams/src/MetaDataAPI/Services/PuppeteerSharp/ChromiumExtractor.puml
ImageService URL ./diagrams/src/MetaDataAPI/Services/Image/ImageService.puml
ImageGenerator URL ./diagrams/src/MetaDataAPI/Services/Image/ImageGenerator.puml
ImageWithMetadata URL ./diagrams/src/MetaDataAPI/Services/Image/Models/ImageWithMetadata.puml
DateTimeExtensions URL ./diagrams/src/MetaDataAPI/Extensions/DateTimeExtensions.puml
StringExtensions URL ./diagrams/src/MetaDataAPI/Extensions/StringExtensions.puml
RpcUrlExtensions URL ./diagrams/src/MetaDataAPI/Extensions/RpcUrlExtensions.puml
LockDealNftServiceExtensions URL ./diagrams/src/MetaDataAPI/Extensions/LockDealNftServiceExtensions.puml
DelayVaultProvider URL ./diagrams/src/MetaDataAPI/Providers/DelayVaultProvider.puml
LockDealProvider URL ./diagrams/src/MetaDataAPI/Providers/LockDealProvider.puml
CollateralProvider URL ./diagrams/src/MetaDataAPI/Providers/CollateralProvider.puml
AbstractProvider URL ./diagrams/src/MetaDataAPI/Providers/AbstractProvider.puml
DispenserProvider URL ./diagrams/src/MetaDataAPI/Providers/DispenserProvider.puml
InvestProvider URL ./diagrams/src/MetaDataAPI/Providers/InvestProvider.puml
DealProvider URL ./diagrams/src/MetaDataAPI/Providers/DealProvider.puml
TimedDealProvider URL ./diagrams/src/MetaDataAPI/Providers/TimedDealProvider.puml
RefundProvider URL ./diagrams/src/MetaDataAPI/Providers/RefundProvider.puml
Erc721MetadataItem URL ./diagrams/src/MetaDataAPI/Providers/Attributes/Erc721MetadataItem.puml
Erc721MetadataItemAttribute URL ./diagrams/src/MetaDataAPI/Providers/Attributes/Erc721MetadataItemAttribute.puml
Erc721Metadata URL ./diagrams/src/MetaDataAPI/Providers/Attributes/Erc721Metadata.puml
Erc721Properties URL ./diagrams/src/MetaDataAPI/Providers/Attributes/Erc721Properties.puml
DisplayType URL ./diagrams/src/MetaDataAPI/Providers/Attributes/DisplayType.puml
HandlebarsToken URL ./diagrams/src/MetaDataAPI/Providers/Image/HandlebarsToken.puml
HealthCheckResponse URL ./diagrams/src/MetaDataAPI/Models/HealthCheckResponse.puml
LambdaResponse URL ./diagrams/src/MetaDataAPI/Models/LambdaResponse.puml
BinaryLambdaResponse URL ./diagrams/src/MetaDataAPI/Models/BinaryLambdaResponse.puml
OptionsResponse URL ./diagrams/src/MetaDataAPI/Models/OptionsResponse.puml
SuccessResponse URL ./diagrams/src/MetaDataAPI/Models/SuccessResponse.puml
PoolIdNotInSupplyRangeResponse URL ./diagrams/src/MetaDataAPI/Models/Errors/PoolIdNotInSupplyRangeResponse.puml
GeneralErrorResponse URL ./diagrams/src/MetaDataAPI/Models/Errors/GeneralErrorResponse.puml
ValidationErrorResponse URL ./diagrams/src/MetaDataAPI/Models/Errors/ValidationErrorResponse.puml
ChainNotSupportedResponse URL ./diagrams/src/MetaDataAPI/Models/Errors/ChainNotSupportedResponse.puml
ValidatorErrorsMessages URL ./diagrams/src/MetaDataAPI/Validation/ValidatorErrorsMessages.puml
GetMetadataRequestValidator URL ./diagrams/src/MetaDataAPI/Validation/GetMetadataRequestValidator.puml
RouteApplicationLoadBalancerRequestValidator URL ./diagrams/src/MetaDataAPI/Validation/RouteApplicationLoadBalancerRequestValidator.puml
LambdaRoutes URL ./diagrams/src/MetaDataAPI/Routing/LambdaRoutes.puml
GetMetadataRequest URL ./diagrams/src/MetaDataAPI/Routing/Requests/GetMetadataRequest.puml
RouteApplicationLoadBalancerRequest URL ./diagrams/src/MetaDataAPI/Routing/Requests/RouteApplicationLoadBalancerRequest.puml
RouteApplicationLoadBalancerRequestHandler URL ./diagrams/src/MetaDataAPI/Routing/Requests/RouteApplicationLoadBalancerRequestHandler.puml
GetMetadataRequestHandler URL ./diagrams/src/MetaDataAPI/Routing/Requests/GetMetadataRequestHandler.puml

@github-actions
Copy link

Summary

Summary
Generated on: 11/13/2025 - 12:16:12
Coverage date: 11/13/2025 - 12:16:11
Parser: Cobertura
Assemblies: 1
Classes: 52
Files: 52
Line coverage: 31.5% (235 of 746)
Covered lines: 235
Uncovered lines: 511
Coverable lines: 746
Total lines: 1473
Branch coverage: 34.6% (36 of 104)
Covered branches: 36
Total branches: 104
Method coverage: Feature is only available for sponsors

Coverage

MetaDataAPI - 31.5%
Name Line Branch
MetaDataAPI 31.5% 34.6%
MetaDataAPI.DefaultServiceProvider 0%
MetaDataAPI.Extensions.DateTimeExtensions 100%
MetaDataAPI.Extensions.LockDealNftServiceExtensions 100%
MetaDataAPI.Extensions.RpcUrlExtensions 100%
MetaDataAPI.Extensions.StringExtensions 100% 50%
MetaDataAPI.LambdaFunction 0%
MetaDataAPI.Models.Errors.ChainNotSupportedResponse 0%
MetaDataAPI.Models.Errors.GeneralErrorResponse 100%
MetaDataAPI.Models.Errors.PoolIdNotInSupplyRangeResponse 0%
MetaDataAPI.Models.Errors.ValidationErrorResponse 0%
MetaDataAPI.Models.FaviconLambdaResponse 100%
MetaDataAPI.Models.HealthCheckResponse 100%
MetaDataAPI.Models.LambdaResponse 96.8%
MetaDataAPI.Models.OptionsResponse 100%
MetaDataAPI.Models.SuccessResponse 0%
MetaDataAPI.Providers.AbstractProvider 0% 0%
MetaDataAPI.Providers.Attributes.Erc721Metadata 0%
MetaDataAPI.Providers.Attributes.Erc721MetadataItem 0%
MetaDataAPI.Providers.Attributes.Erc721MetadataItemAttribute 0%
MetaDataAPI.Providers.Attributes.Erc721Properties 0%
MetaDataAPI.Providers.CollateralProvider 0%
MetaDataAPI.Providers.DealProvider 0%
MetaDataAPI.Providers.DelayVaultProvider 0%
MetaDataAPI.Providers.DispenserProvider 0%
MetaDataAPI.Providers.Image.HandlebarsToken 0%
MetaDataAPI.Providers.InvestProvider 0%
MetaDataAPI.Providers.LockDealProvider 0%
MetaDataAPI.Providers.RefundProvider 0%
MetaDataAPI.Providers.TimedDealProvider 0%
MetaDataAPI.Routing.LambdaRoutes 100%
MetaDataAPI.Routing.Requests.GetMetadataRequest 100%
MetaDataAPI.Routing.Requests.GetMetadataRequestHandler 0% 0%
MetaDataAPI.Routing.Requests.RouteApplicationLoadBalancerRequest 100%
MetaDataAPI.Routing.Requests.RouteApplicationLoadBalancerRequestHandler 100% 91.6%
MetaDataAPI.Services.ChainsInfo.ChainInfo 100%
MetaDataAPI.Services.ChainsInfo.StrapiChainManager 0%
MetaDataAPI.Services.Erc20.Erc20Provider 89.4% 100%
MetaDataAPI.Services.Erc20.Erc20Token 100%
MetaDataAPI.Services.Http.FailureOnlyLoggingHandler 100%
MetaDataAPI.Services.Http.HttpClientFactory 100% 100%
MetaDataAPI.Services.Http.Web3Factory 100%
MetaDataAPI.Services.Image.ImageGenerator 0% 0%
MetaDataAPI.Services.Image.ImageService 0% 0%
MetaDataAPI.Services.Image.Models.ImageWithMetadata 0%
MetaDataAPI.Services.PuppeteerSharp.ChromiumExtractor 0% 0%
MetaDataAPI.Services.PuppeteerSharp.HeadlessChromiumPuppeteerLauncher 0%
MetaDataAPI.Services.Strapi.Models.StrapiDataResponse 0%
MetaDataAPI.Services.Strapi.StrapiClient 0% 0%
MetaDataAPI.Services.Strapi.StrapiGraphQLClient 100%
MetaDataAPI.Validation.GetMetadataRequestValidator 100% 100%
MetaDataAPI.Validation.RouteApplicationLoadBalancerRequestValidator 100% 91.6%
MetaDataAPI.Validation.ValidatorErrorsMessages 100% 50%

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Lomet Lomet merged commit 5100bc8 into master Nov 17, 2025
9 checks passed
@Lomet Lomet deleted the issue_#351 branch November 17, 2025 20:10
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.

Retries for HTTP calls via Polly lib Timeout issue

3 participants