public IActionResult UpdateGumballMachine(string location, [FromBody] UpdateGumballMachineDto gumballMachine)
        {
            var gm = _machines.Where(gm => gm.Location == location).FirstOrDefault();

            if (gm == null)
            {
                return(NotFound());
            }

            var defaultStates = new string[] { "NoQuarterState", "HasQuarterState", "SoldOutState", "SoldState", "WinnerState" };

            if (!defaultStates.Any(ds => ds.ToLower() == gumballMachine.CurrentState.Name.ToLower()))
            {
                return(BadRequest());
            }

            gm.Count        = gumballMachine.Inventory;
            gm.CurrentState = Helper.StateFactory(gumballMachine.CurrentState.Name, gm);
            gm.Location     = gumballMachine.Location;

            var gumballMachineDto = new GumballMachineDto
            {
                Location     = gm.Location,
                Inventory    = gm.Count,
                CurrentState = new CurrentStateDto {
                    Name = gm.CurrentState.GetType().Name
                }
            };

            return(CreatedAtRoute("GetGumballMachine", new { location = gm.Location }, gumballMachineDto));
        }
        public ActionResult <GumballMachineDto> GetGumballMachine(string location)
        {
            var gm = _machines.Where(m => m.Location.ToLower() == location.ToLower()).FirstOrDefault();

            if (gm == null)
            {
                return(NotFound());
            }
            var gumballMachineDto = new GumballMachineDto
            {
                Location     = gm.Location,
                Inventory    = gm.Count,
                CurrentState = new CurrentStateDto {
                    Name = gm.CurrentState.GetType().Name
                }
            };

            return(gumballMachineDto);
        }
        public IActionResult CreateGumballMachine([FromBody] CreateGumballMachineDto gumballMachine)
        {
            if (_machines.Any(m => m.Location.ToLower() == gumballMachine.Location.ToLower()))
            {
                return(Conflict());
            }

            var gm = new GumballMachine(gumballMachine.Inventory, gumballMachine.Location);

            _machines.Add(gm);
            var gumballMachineDto = new GumballMachineDto
            {
                Location     = gm.Location,
                Inventory    = gm.Count,
                CurrentState = new CurrentStateDto {
                    Name = gm.CurrentState.GetType().Name
                }
            };

            return(CreatedAtRoute("GetGumballMachine", new { location = gumballMachine.Location }, gumballMachineDto));
        }