public ActionResult PartiallyUpdateShoppingItemForShoppingList(Guid shoppingListId, Guid shoppingItemId, JsonPatchDocument <ShoppingItemForUpdateDto> patchDocument) { if (!_shopListingRepository.ShoppingListExists(shoppingListId)) { return(NotFound()); } var shoppingItemForShoppingListFromRepo = _shopListingRepository.GetShoppingItem(shoppingListId, shoppingItemId); if (shoppingItemForShoppingListFromRepo == null) { var shoppingItemDto = new ShoppingItemForUpdateDto(); patchDocument.ApplyTo(shoppingItemDto, ModelState); if (!TryValidateModel(shoppingItemDto)) { return(ValidationProblem(ModelState)); } var shoppingItemToAdd = _mapper.Map <Entities.ShoppingItem>(shoppingItemDto); shoppingItemToAdd.Id = shoppingItemId; _shopListingRepository.AddShoppingItem(shoppingListId, shoppingItemToAdd); _shopListingRepository.Save(); var shoppingItemToReturn = _mapper.Map <ShoppingItemDto>(shoppingItemToAdd); return(CreatedAtRoute("GetShoppingItemForShoppingList", new { shoppingListId, shoppingItemId = shoppingItemToReturn.Id }, shoppingItemToReturn)); } var shoppingItemToPatch = _mapper.Map <ShoppingItemForUpdateDto>(shoppingItemForShoppingListFromRepo); // add validation patchDocument.ApplyTo(shoppingItemToPatch, ModelState); if (!TryValidateModel(shoppingItemToPatch)) { return(ValidationProblem(ModelState)); } _mapper.Map(shoppingItemToPatch, shoppingItemForShoppingListFromRepo); _shopListingRepository.UpdateShoppingItem(shoppingItemForShoppingListFromRepo); _shopListingRepository.Save(); return(NoContent()); }
public IActionResult UpdateShoppingItemForShoppingList( Guid shoppingListId, Guid shoppingItemId, ShoppingItemForUpdateDto shoppingItem) { if (!_shopListingRepository.ShoppingListExists(shoppingListId)) { return(NotFound()); } var shoppingItemForShoppingListFromRepo = _shopListingRepository.GetShoppingItem(shoppingListId, shoppingItemId); if (shoppingItemForShoppingListFromRepo == null) { var shoppingItemToAdd = _mapper.Map <Entities.ShoppingItem>(shoppingItem); shoppingItemToAdd.Id = shoppingItemId; _shopListingRepository.AddShoppingItem(shoppingListId, shoppingItemToAdd); _shopListingRepository.Save(); var shoppingItemToReturn = _mapper.Map <ShoppingItemDto>(shoppingItemToAdd); return(CreatedAtRoute("GetShoppingItemForShoppingList", new { shoppingListId, shoppingItemId = shoppingItemToReturn.Id }, shoppingItemToReturn)); } // map the entity to a ShoppingItemForUpdateDto // apply the updated field values to that dto // map the ShoppingItemForUpdateDto back to an entity _mapper.Map(shoppingItem, shoppingItemForShoppingListFromRepo); _shopListingRepository.UpdateShoppingItem(shoppingItemForShoppingListFromRepo); _shopListingRepository.Save(); return(NoContent()); }