public async Task <IActionResult> RegisterItem(AddItemModelView itemToAdd)
        {
            if (!ModelState.IsValid || itemToAdd == null)
            {
                return(BadRequest(new ErrorModelView("information not accepted")));
            }

            try
            {
                var request = new HttpRequestMessage(HttpMethod.Get, $"meals/{itemToAdd.mealId}");

                var client = clientFactory.CreateClient("gfmm");

                var clientResponse = await client.SendAsync(request);

                if (clientResponse.StatusCode == HttpStatusCode.NotFound)
                {
                    return(BadRequest(new ErrorModelView($"no meal was found by the resource identifier '{itemToAdd.mealId}'")));
                }

                var responsePayload = await clientResponse.Content.ReadAsStreamAsync();

                JsonSerializerOptions deserializationOptions = new JsonSerializerOptions();
                deserializationOptions.PropertyNameCaseInsensitive = true;

                GetDetailedMealInformationModelView meal = await JsonSerializer.DeserializeAsync <GetDetailedMealInformationModelView>(responsePayload, deserializationOptions);

                DateTime expirationDate = DateTime.Parse(itemToAdd.expirationDate);
                DateTime productionDate = DateTime.Parse(itemToAdd.productionDate);

                Item item = new Item(MealID.ValueOf(meal.Designation), productionDate, expirationDate);

                this.repositoryFactory.ItemRepository().Save(item);

                RegisterItemModelView response = new RegisterItemModelView(item);

                return(StatusCode(201, response));
            }
            catch (InvalidOperationException argumentException)
            {
                // TODO: Log exception
                return(BadRequest(new ErrorModelView(argumentException.Message)));
            }
            catch (ArgumentException argumentException)
            {
                // TODO: Log exception
                return(BadRequest(new ErrorModelView(argumentException.Message)));
            }
            catch (FormatException dateFormatException)
            {
                // TODO: Log exception
                return(BadRequest(new ErrorModelView(dateFormatException.Message)));
            }
            catch (Exception databaseException)
            {
                // TODO: Log exception
                return(StatusCode(500, null));
            }
        }
        public IActionResult RegisterItem(AddItemModelView itemToAdd)
        {
            if (!ModelState.IsValid || itemToAdd == null)
            {
                return(BadRequest(new ErrorModelView("information not accepted")));
            }

            try
            {
                Meal meal = this.factory.MealRepository().Find(itemToAdd.mealId);

                string   location       = itemToAdd.location;
                DateTime expirationDate = DateTime.Parse(itemToAdd.expirationDate);
                DateTime productionDate = DateTime.Parse(itemToAdd.productionDate);

                Item item = new Item(meal.Id(), location, productionDate, expirationDate);

                this.factory.ItemRepository().Save(item);

                RegisterItemModelView response = new RegisterItemModelView(item);

                return(StatusCode(201, response));
            }
            catch (InvalidOperationException argumentException)
            {
                // TODO: Log exception
                return(BadRequest(new ErrorModelView(argumentException.Message)));
            }
            catch (ArgumentException argumentException)
            {
                // TODO: Log exception
                return(BadRequest(new ErrorModelView(argumentException.Message)));
            }
            catch (FormatException dateFormatException)
            {
                // TODO: Log exception
                return(BadRequest(new ErrorModelView(dateFormatException.Message)));
            }
            catch (Exception databaseException)
            {
                // TODO: Log exception
                return(StatusCode(500, null));
            }
        }