using System.Collections.Generic;
namespace HelloWorldMvcApp
[RoutePrefix("api/company")]
public class CompanyController : ApiController
private readonly CompanyRepository _companyRepository;
public CompanyController(CompanyRepository companyRepository)
_companyRepository = companyRepository;
[Route("{customerNumber}")]
public IHttpActionResult Get(string customerNumber)
var maybeCompany = _companyRepository.FindByCustomerNumber(customerNumber);
return match(maybeCompany,
Some: company => (IHttpActionResult) Ok(company),
None: () => InternalServerError(new Exception("Customer not found")));
public class CompanyRepository
private readonly string _connectionString;
public CompanyRepository(string connectionString)
_connectionString = connectionString;
public Option<Company> FindByCustomerNumber(string customerNumber)
using (var db = CreateConnection())
var result = db.Query<Company, MerchantRisk, Company>(SqlQueries.FindByCustomerNumber,
(company, merchantRisk) =>
company.MerchantRisk = merchantRisk;
}, new {CustomerNumber = customerNumber}, splitOn: "MerchantRiskId").FirstOrDefault();
return result != null ? Option<Company>.Some(result) : Option<Company>.None;
private IDbConnection CreateConnection()
return new SqlConnection(_connectionString);