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)); } }