public async Task <IActionResult> Post([FromBody] ListCostsByGivenKwhConsumptionEvent command) { var response = await _mediator.Send(command); if (_notificationContext.HasErrorNotifications) { var notifications = _notificationContext.GetErrorNotifications(); var message = string.Join(", ", notifications.Select(x => x.Value)); return(BadRequest(message)); } return(Ok(response)); }
public async Task <IEnumerable <CalculatedCostResponse> > Handle(ListCostsByGivenKwhConsumptionEvent request, CancellationToken cancellationToken) { var calculedCosts = new List <CalculatedCostResponse>(); var tariffs = await _tariffRepository.GetAllTariffs(); foreach (var tariff in tariffs) { switch (tariff.PlanType) { case PlanType.Monthly: if (request.AnnualKwhConsumption > tariff.KilowattHourAllowance * 12) { calculedCosts.Add(new CalculatedCostResponse { Tariff = _mapper.Map <TariffResponse>(tariff), BillingType = Enum.GetName(typeof(PlanType), PlanType.Annual), Cost = tariff.Cost * 12 + (request.AnnualKwhConsumption - tariff.KilowattHourAllowance * 12) * tariff.KilowattHourCost }); } else { calculedCosts.Add(new CalculatedCostResponse { Tariff = _mapper.Map <TariffResponse>(tariff), BillingType = Enum.GetName(typeof(PlanType), PlanType.Annual), Cost = tariff.Cost * 12 }); } break; default: if (request.AnnualKwhConsumption > tariff.KilowattHourAllowance) { calculedCosts.Add(new CalculatedCostResponse { Tariff = _mapper.Map <TariffResponse>(tariff), BillingType = Enum.GetName(typeof(PlanType), PlanType.Annual), Cost = tariff.Cost + (request.AnnualKwhConsumption - tariff.KilowattHourAllowance) * tariff.KilowattHourCost }); } else { calculedCosts.Add(new CalculatedCostResponse { Tariff = _mapper.Map <TariffResponse>(tariff), BillingType = Enum.GetName(typeof(PlanType), PlanType.Annual), Cost = tariff.Cost }); } break; } } return(_mapper.Map <IEnumerable <CalculatedCostResponse> >(calculedCosts.OrderBy(s => s.Cost))); }