public async Task <ActionResult <ItemView> > AddProduct([FromBody] NewItemDto newProduct)
        {
            try {
                if (newProduct == null)
                {
                    return(StatusCode(400));
                }

                if (!ModelState.IsValid)
                {
                    return(new InvalidInputResponse(ModelState));
                }
                var result = await _Mediator.Send(newProduct);

                var view = _Mediator.Send(new GetItemByIdQuery()
                {
                    Id = result
                });

                return(StatusCode(201, view));
            } catch (NotFoundException e) {
                return(StatusCode(404, e.Message));
            } catch (DuplicateKeyException e) {
                ModelState.AddModelError("Code", e.Message);
                return(new InvalidInputResponse(ModelState));
            } catch (Exception) {
                return(StatusCode(500, "Server Error, Try Again Later"));
            }
        }
        public async Task <int> AddNew([FromBody] NewItemDto newItem)
        {
            int newItemId = -1;

            //A bit of duplicate looking code, but we want to make sure the type matches
            // a case before we do any work, and we want to make sure work has been done
            // before we save any changes.
            switch (newItem.ItemType)
            {
            case "make":
            {
                VehicleMake makeToAdd = new VehicleMake {
                    VehicleMakeName = newItem.ItemValue
                };
                await _vehicleMakeRepository.AddAsync(makeToAdd);

                await _vehicleMakeRepository.SaveChangesAsync();

                newItemId = makeToAdd.VehicleMakeId;
                break;
            }

            case "model":
            {
                VehicleModel modelToAdd = new VehicleModel {
                    VehicleModelName = newItem.ItemValue, VehicleMakeId = newItem.ItemParentId
                };
                await _vehicleModelRepository.AddAsync(modelToAdd);

                await _vehicleMakeRepository.SaveChangesAsync();

                newItemId = modelToAdd.VehicleModelId;
                break;
            }
            }
            //we are only expecting one change
            return(newItemId);
        }