コード例 #1
0
        public PagedView <KeyValuePair <View.Beer.BeerStyle, int> > SumVolumeByStyle(ConsumationGetBinding binding)
        {
            using (var context = GetMainContext())
            {
                var grouped = context.Consumations
                              .WhereUser(UserId)
                              .Where(binding, context)
                              .Include(x => x.Beer)
                              .ThenInclude(x => x.BeerStyle)
                              .GroupBy(x => new
                {
                    x.Beer.BeerStyle.ValueId,
                    x.Beer.BeerStyle.Name
                });

                return(grouped.OrderByDescending(x => x.Sum(y => y.Volume))
                       .Select(x => new KeyValuePair <View.Beer.BeerStyle, int>(
                                   new ()
                {
                    Id = x.Key.ValueId,
                    Name = x.Key.Name
                }, x.Sum(y => y.Volume)))
                       .ToPagedView(binding, grouped.Count()));
            }
        }
コード例 #2
0
 public int SumVolume(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .Sum(x => x.Volume));
     }
 }
コード例 #3
0
 public int Count(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .Count());
     }
 }
コード例 #4
0
        public async Task <GoogleCloudDialogflowV2WebhookResponse> GetConsumationSum(GoogleCloudDialogflowV2WebhookRequest request)
        {
            var binding = new ConsumationGetBinding(request.ToFilteredBinding());

            int sum = _consumationHandler.SumVolume(binding);

            return(new GoogleCloudDialogflowV2WebhookResponse()
            {
                FulfillmentText = $"You've drank {sum / 1000} liters."
            });
        }
コード例 #5
0
 public int CountBeers(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .Select(x => x.BeerId)
                .Distinct()
                .Count());
     }
 }
コード例 #6
0
        public async Task <GoogleCloudDialogflowV2WebhookResponse> GetConsumationCount(GoogleCloudDialogflowV2WebhookRequest request)
        {
            var binding = new ConsumationGetBinding(request.ToFilteredBinding());

            int count = _consumationHandler.Count(binding);

            return(new GoogleCloudDialogflowV2WebhookResponse()
            {
                FulfillmentText = $"You've drank {count} beers."
            });
        }
コード例 #7
0
 public IEnumerable <KeyValuePair <int, int> > SumVolumeByYear(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .GroupBy(x => x.Date.Year)
                .Select(x => new KeyValuePair <int, int>(x.Key, x.Sum(y => y.Volume)))
                .ToList()
                .OrderBy(x => x.Key));
     }
 }
コード例 #8
0
 public PagedView <View.Consumation.Consumation> Get(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .Include(x => x.Beer)
                .ThenInclude(x => x.BeerStyle)
                .OrderByDescending(x => x.Date)
                .Select(x => new View.Consumation.Consumation(x))
                .ToPagedView(binding));
     }
 }
コード例 #9
0
 public IEnumerable <GroupedByMonth <int> > SumVolumeByMonthOfYear(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .GroupBy(x => new { x.Date.Year, x.Date.Month })
                .Select(x => new GroupedByMonth <int>(x.Sum(y => y.Volume), x.Key.Year, x.Key.Month))
                .ToList()
                .OrderBy(x => x.Year)
                .ThenBy(x => x.Month));
     }
 }
コード例 #10
0
        public IEnumerable <KeyValuePair <string, int> > CountByMonth(ConsumationGetBinding binding)
        {
            using (var context = GetMainContext())
            {
                var to = binding.To ?? DateTime.Now;

                return(context.Consumations.WhereUser(UserId)
                       .Where(binding, context)
                       .GroupBy(x => x.Date.ToString("MMMM"))
                       .Select(x => new KeyValuePair <string, int>(x.Key, x.Count()))
                       .ToList());
            }
        }
コード例 #11
0
        public IEnumerable <KeyValuePair <int, int> > CountByYear(ConsumationGetBinding binding)
        {
            using (var context = GetMainContext())
            {
                var to = binding.To ?? DateTime.Now;

                return(context.Consumations.WhereUser(UserId)
                       .Where(binding, context)
                       .GroupBy(x => x.Date.Year)
                       .Select(x => new KeyValuePair <int, int>(x.Count(), x.Key))
                       .ToList()
                       .FillMissingYears(year => new KeyValuePair <int, int>(0, year), binding.From?.Year, to.Year));
            }
        }
コード例 #12
0
        public async Task <IEnumerable <KeyValuePair <int, int> > > AverageByMonth(ConsumationGetBinding binding)
        {
            using (var context = GetMainContext())
            {
                //TODO: Take leap years into account

                return(await context.Consumations.WhereUser(UserId)
                       .Where(binding, context)
                       .GroupBy(x => x.Date.Year)
                       .OrderBy(x => x.Key)
                       .Select(x => new KeyValuePair <int, int>(x.Key, x.Sum(y => y.Volume) / 365))
                       .ToListAsync());
            }
        }
コード例 #13
0
 public IEnumerable <KeyValuePair <int, int> > SumVolumeByDayOfWeek(ConsumationGetBinding binding)
 {
     using (var sqlConnection = GetSqlConnection())
     {
         return(sqlConnection.Query <KeyValuePair <int, int> >(SqlLoader.Load(SqlScripts.GetConsumationSumByDayOfWeek),
                                                               new {
             binding.From,
             binding.To,
             UserId = UserId
         })
                .Select(x => new KeyValuePair <int, int>(x.Key == 1 ? 6 : x.Key - 2, x.Value))
                .OrderBy(x => x.Key));
     }
 }
コード例 #14
0
        public IEnumerable <KeyValuePair <string, int> > CountByMonthOfYear(ConsumationGetBinding binding)
        {
            using (var context = GetMainContext())
            {
                var to = binding.To ?? DateTime.Now;

                return(context.Consumations.WhereUser(UserId)
                       .Where(binding, context)
                       .GroupBy(x => new { x.Date.Year, x.Date.Month })
                       .Select(x => new GroupedByMonth <int>(x.Count(), x.Key.Year, x.Key.Month))
                       .ToList()
                       .FillMissingMonths(datetime => new GroupedByMonth <int>(0, datetime.Year, datetime.Month), binding.From, to)
                       .Select(x => new KeyValuePair <string, int>($"{x.Year}-{x.Month}", x.Data)));
            }
        }
コード例 #15
0
 public IEnumerable <(DateTime From, DateTime To)> ConsecutiveDates(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .Select(x => x.Date)
                .Distinct()
                .ToList()
                .ConsecutiveDates()
                .Select(x => new { Range = x, Count = x.To.Subtract(x.From).Days + 1 })
                .OrderByDescending(x => x.Count)
                .Select(x => x.Range)
                .ToList());
     }
 }
コード例 #16
0
 public async Task <IEnumerable <View.Country.Country> > GetCountries(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(await context.Consumations
                .WhereUser(UserId)
                .Where(binding, context)
                .Include(x => x.Beer)
                .ThenInclude(x => x.BeerBrand)
                .ThenInclude(x => x.Country)
                .Select(x => x.Beer.BeerBrand.Country)
                .Where(x => x != null)
                .Distinct()
                .Select(x => new View.Country.Country(x))
                .ToListAsync());
     }
 }
コード例 #17
0
 public PagedView <KeyValuePair <View.Beer.Beer, int> > CountByBeer(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .Include(x => x.Beer)
                .GroupBy(x => new
         {
             x.Beer.ValueId,
             x.Beer.Name
         })
                .OrderByDescending(x => x.Count())
                .Select(x => new KeyValuePair <View.Beer.Beer, int>(new View.Beer.Beer()
         {
             Id = x.Key.ValueId,
             Name = x.Key.Name
         }, x.Count()))
                .ToPagedView(binding));
     }
 }
コード例 #18
0
 public IActionResult GetSumByDayOfWeek(ConsumationGetBinding binding) => Ok(_consumationHandler.SumVolumeByDayOfWeek(binding));
コード例 #19
0
 public IEnumerable <KeyValuePair <string, int> > GetCountByMonthOfYear([FromQuery] ConsumationGetBinding binding) => _consumationHandler.CountByMonthOfYear(binding);
コード例 #20
0
 public async Task <IEnumerable <KeyValuePair <int, decimal> > > AlcoholByYear(ConsumationGetBinding binding)
 {
     using (var context = GetMainContext())
     {
         return(await context.Consumations.WhereUser(UserId)
                .Where(binding, context)
                .GroupBy(x => x.Date.Year)
                .OrderBy(x => x.Key)
                .Select(x => new KeyValuePair <int, decimal>(x.Key, x.Sum(y => y.Volume * y.Beer.Abv / 100)))
                .ToListAsync());
     }
 }
コード例 #21
0
 public IActionResult GetCountByYear([FromQuery] ConsumationGetBinding binding) => Ok(_consumationHandler.CountByYear(binding));
コード例 #22
0
        public IEnumerable <KeyValuePair <View.Beer.BeerServing, int> > SumVolumeByServing(ConsumationGetBinding binding)
        {
            using (var context = GetMainContext())
            {
                var grouped = context.Consumations.WhereUser(UserId)
                              .Where(binding, context)
                              .Include(x => x.BeerServing)
                              .GroupBy(x => new
                {
                    x.BeerServing.Name,
                    x.BeerServing.ValueId
                });

                return(grouped.OrderByDescending(x => x.Sum(y => y.Volume))
                       .Select(x => new KeyValuePair <View.Beer.BeerServing, int>(new()
                {
                    Id = x.Key.ValueId,
                    Name = x.Key.Name
                }, x.Sum(y => y.Volume)))
                       .ToList());
            }
        }
コード例 #23
0
 public int GetBrandCount(ConsumationGetBinding binding) => _consumationHandler.CountBrands(binding);
コード例 #24
0
        public static IQueryable <Consumation> Where(this IQueryable <Consumation> query, ConsumationGetBinding binding, MainContext context)
        {
            var beerId      = context.Beers.GetId(binding.BeerId);
            var beerBrandId = context.BeerBrands.GetId(binding.BrandId);
            var countryId   = context.Countries.GetId(binding.CountryId);
            var beerStyleId = context.BeerStyles.GetId(binding.StyleId);

            return(query.Include(x => x.Beer)
                   .WhereIf(binding.From.HasValue, x => x.Date >= binding.From.Value)
                   .WhereIf(binding.To.HasValue, x => x.Date <= binding.To.Value)
                   .WhereIf(binding.Serving.HasValue, x => x.BeerServingId == (int)binding.Serving.Value)
                   .WhereIf(!string.IsNullOrWhiteSpace(binding.CountryId), x => x.Beer.BeerBrand.CountryId == countryId.Value)
                   .WhereIf(beerId.HasValue, x => x.BeerId == beerId.Value)
                   .WhereIf(!string.IsNullOrWhiteSpace(binding.StyleId), x => x.Beer.BeerStyleId == beerStyleId)
                   .WhereIf(beerBrandId.HasValue, x => x.Beer.BeerBrandId == beerBrandId.Value));
        }
コード例 #25
0
 public IActionResult GetCountByBeer(ConsumationGetBinding binding) => Ok(_consumationHandler.CountByBeer(binding));
コード例 #26
0
        public async Task <IActionResult> GetCountryBoundaries(ConsumationGetBinding binding)
        {
            var countries = await _consumationHandler.GetCountries(binding);

            return(Ok(_countryHandler.GetBoundaries(countries)));
        }
コード例 #27
0
 public int GetSum(ConsumationGetBinding binding) => _consumationHandler.SumVolume(binding);
コード例 #28
0
 public IActionResult GetSumVolumeByCountry(ConsumationGetBinding binding) => Ok(_consumationHandler.SumVolumeByCountry(binding));
コード例 #29
0
 public async Task <IActionResult> GetCountries(ConsumationGetBinding binding) => Ok(await _consumationHandler.GetCountries(binding));
コード例 #30
0
 public IActionResult GetSumByMonthOfYear(ConsumationGetBinding binding) => Ok(_consumationHandler.SumVolumeByMonthOfYear(binding));