public IActionResult PartiallyUpdatePointOfInterest(int cityId, int id, [FromBody] JsonPatchDocument <PointOfInterestForUpdatesDto> patchDoc) { if (patchDoc == null) { return(BadRequest()); } var city = CitiesDataStore.Current.Cities.FirstOrDefault(c => c.Id == cityId); if (city == null) { return(NotFound()); } var pointOfInterestFromStore = city.PointsOfInterest.FirstOrDefault(p => p.Id == id); if (pointOfInterestFromStore == null) { return(NotFound()); } var pointOfInterestToPatch = new PointOfInterestForUpdatesDto() { Name = pointOfInterestFromStore.Name, Description = pointOfInterestFromStore.Description }; //Apply the Patch Document patchDoc.ApplyTo(pointOfInterestToPatch, ModelState); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (pointOfInterestToPatch.Description == pointOfInterestToPatch.Name) { ModelState.AddModelError("Description" /*Can be a property name, but doesn't have to be*/, "The provided description should be different from Name."); } TryValidateModel(pointOfInterestToPatch); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } pointOfInterestFromStore.Name = pointOfInterestToPatch.Name; pointOfInterestFromStore.Description = pointOfInterestToPatch.Description; return(NoContent()); }
public IActionResult UpdatePointOfInterest(int cityId, int id, [FromBody] PointOfInterestForUpdatesDto pointOfInterest /*Use to get content from body*/) { if (null == pointOfInterest) { return(BadRequest()); } //Incase Name and Description are the same if (pointOfInterest.Description == pointOfInterest.Name) { ModelState.AddModelError("Description" /*Can be a property name, but doesn't have to be*/, "The provided description should be different from Name."); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var city = CitiesDataStore.Current.Cities.FirstOrDefault(c => c.Id == cityId); if (city == null) { return(NotFound()); } var pointOfInterestFromStore = city.PointsOfInterest.FirstOrDefault(p => p.Id == id); if (pointOfInterestFromStore == null) { return(NotFound()); } pointOfInterestFromStore.Name = pointOfInterest.Name; pointOfInterestFromStore.Description = pointOfInterest.Description; return(NoContent()); }