public IActionResult AddBeer(AddBeerVM vm)
        {
            TapRoom tapRoom = _dal.TapRooms.Where(x => x.Id == vm.TapRoomId).Include(x => x.Beers).Include(x => x.SeasonMember).ThenInclude(x => x.Season).FirstOrDefault();

            if (tapRoom.UserId != _session.UserId)
            {
                return(Json(new { ErrorMessage = "Unauthorized" }));
            }

            DataValidationResult validationResult = TapRoomValidator.AddBeerValidator(vm, tapRoom);

            if (!validationResult.IsValid)
            {
                return(Json(new { ErrorMessage = validationResult.ErrorMessages.First() }));
            }

            Beer beer = new Beer()
            {
                TapRoomId   = vm.TapRoomId,
                BeerName    = vm.BeerName,
                BreweryName = vm.BreweryName,
                StyleName   = vm.StyleName,
                StyleFamily = vm.StyleFamily,
                UntappdId   = vm.UntappdId
            };

            _dal.Beers.Add(beer);
            _dal.SaveChanges();

            return(Json(new { }));
        }
        public static DataValidationResult AddBeerValidator(AddBeerVM vm, TapRoom tapRoom)
        {
            DataValidationResult result = new DataValidationResult();

            if (tapRoom == null)
            {
                result.ErrorMessages.Add("Tap Room Not Found");
            }
            else if (tapRoom.Beers.Count >= tapRoom.League.MaxRosterSize)
            {
                result.ErrorMessages.Add("Your Keg Storage is Full");
            }

            else if (DateTime.Now < tapRoom.Season?.WaiverStartDate && DateTime.Now > tapRoom.Season?.WaiverEndDate)
            {
                result.ErrorMessages.Add("Waivers are not currently being accepted for the Season");
            }

            result.IsValid = !result.ErrorMessages.Any();
            return(result);
        }