using System.Threading.Tasks;
public static async Task Main()
Console.WriteLine("Starting API request...");
var amount = (decimal)new Random().Next(1000);
var response = new TaxController(new Logger()).GetTaxes(new WellsFargoTaxRequest(12345, amount));
Console.WriteLine($"amount:{amount}, tax:{response.TaxAmount}, bracket:{response.Bracket}");
Console.WriteLine("API request completed...");
public class TaxController
private readonly ILogger _logger;
public TaxController(ILogger logger)
public TaxServiceResponse GetTaxes(WellsFargoTaxRequest request)
var taxService = new TaxService(_logger);
var taxes = taxService.GetTaxes(request);
public TaxService(ILogger logger)
public TaxServiceResponse GetTaxes(WellsFargoTaxRequest request)
var taxProvider = new WellsFargoTaxProvider();
var taxProviderResponse = taxProvider.GetTaxesAsync(request).Result;
if (taxProviderResponse.TaxAmount < 2)
if (taxProviderResponse.TaxAmount < 5)
if (taxProviderResponse.TaxAmount < 10)
if (taxProviderResponse.TaxAmount < 20)
if (taxProviderResponse.TaxAmount > 20)
var response = new TaxServiceResponse();
response.ProductSku = taxProviderResponse.ProductSku;
response.TaxAmount = taxProviderResponse.TaxAmount;
response.Bracket = (one ? "1" : two ? "2" : three ? "3" : four ? "4" : five ? "5" : "error");
if (response.Bracket == "error")
public class TaxServiceResponse
public int ProductSku { get; set; }
public decimal TaxAmount { get; set; }
public string Bracket { get; set; }
public class WellsFargoTaxProvider
public async Task<WellsFargoTaxResponse> GetTaxesAsync(WellsFargoTaxRequest request)
var response = new WellsFargoTaxResponse(request.ProductSku, request.ProductCost);
return await Task.FromResult(response);
public class WellsFargoTaxRequest
public WellsFargoTaxRequest(int sku, decimal cost)
public int ProductSku { get; set; }
public decimal ProductCost { get; set; }
public class WellsFargoTaxResponse
public WellsFargoTaxResponse(int sku, decimal cost)
public int ProductSku { get; set; }
public decimal TaxAmount { get; set; }
public void Log(string message);
public class Logger : ILogger
public void Log(string message) => Console.WriteLine(message);