Skip to content

Conversation

@matteobusnelli
Copy link

@matteobusnelli matteobusnelli commented Jan 12, 2026

Overview

Production-ready ExchangeRateProvider that fetches daily exchange rates from the Czech National Bank (CNB) public API and outputs them in CZK/XXX format.

Architecture

Core Components

  • ExchangeRateProvider - Orchestrates fetching, filtering, and rate conversion (CNB format → 1 CZK = X Foreign)
  • CnbHttpClient - HTTP communication with 30s timeout and domain-specific error handling
  • CnbDataParser - Parses pipe-separated format with validation and culture-invariant decimal parsing

Tech Stack

  • .NET 10.0
  • Microsoft.Extensions.* - DI, Configuration, Logging, HttpClient factory
  • Polly - Retry policy (3 attempts, 2s delays) for transient HTTP failures
  • xUnit, Moq, FluentAssertions - Testing

Key Features

Resilience

  • Polly retry for 5xx/network errors with exponential backoff
  • Configurable timeouts and retry behavior via appsettings.json

Error Handling

  • HTTP/timeout errors → domain-specific exceptions with clear messages
  • Parsing errors → CnbDataParsingException with line-number context
  • Missing currencies → silently ignored (per requirements)

Configuration

  • Environment-specific config (appsettings.json, appsettings.{env}.json)
  • CNB endpoint: https://www.cnb.cz/en/financial-markets/.../daily.txt

Design Principles

  • Simple architecture: HTTP client → Parser → Provider (no over-engineering)
  • Immutable models: Currency and ExchangeRate are record types
  • Separation of concerns: Network, parsing, and business logic cleanly separated
  • Returns only explicit rates - no inverse or cross-rate calculations

@wiz-trial-29da161873
Copy link

wiz-trial-29da161873 bot commented Jan 12, 2026

Wiz Scan Summary

Scanner Findings
Vulnerability Finding Vulnerabilities -
Data Finding Sensitive Data -
Secret Finding Secrets -
IaC Misconfiguration IaC Misconfigurations -
SAST Finding SAST Findings 1 Medium
Software Supply Chain Finding Software Supply Chain Findings -
Total 1 Medium

View scan details in Wiz

To detect these findings earlier in the dev lifecycle, try using Wiz Code VS Code Extension.

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