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)));
        }