public DateTime GetCutOffDateByTimeInterval(DateTime now, ConsumptionTimeInterval duration) { switch (duration.TimeUnit) { case TimeUnit.SECOND: return(now.AddSeconds((-1) * duration.Value)); case TimeUnit.MINUTE: return(now.AddMinutes((-1) * duration.Value)); case TimeUnit.HOUR: return(now.AddHours((-1) * duration.Value)); case TimeUnit.DAY: return(now.AddDays((-1) * duration.Value)); default: return(DateTime.MinValue); } }
public async Task <ActionResult> consumption_report(string duration) { var timeInterval = new ConsumptionTimeInterval(duration); if (!timeInterval.IsValid) { return(BadRequest("The time interval supplied is invalid")); } var cutOffDate = GetCutOffDateByTimeInterval(DateTime.Now, timeInterval); var consumptionCounterFilteredByDate = await _repository.GetByCutOffDateAsync(cutOffDate); var consumptionPerVillage = consumptionCounterFilteredByDate .GroupBy(a => a.VillageName) .Select(x => new ConsumptionPerVillage(x.Key, x.Sum(y => y.Amount))); var result = new ConsumptionReport(consumptionPerVillage); return(Ok(result)); }