public IActionResult PartiallyUpdatePointOfInterest(int cityId, int id, [FromBody] JsonPatchDocument <PointOfInterestForStuffDto> patchDoc)
        {
            var city = CitiesDataStore.Current.Cities.FirstOrDefault(c => c.Id == cityId);

            if (city == null)
            {
                return(NotFound());
            }

            var pointOfInterest = city.PointsOfInterest.FirstOrDefault(p => p.Id == id);

            if (pointOfInterest == null)
            {
                return(NotFound());
            }

            var finalPointOfInterest = new PointOfInterestForStuffDto()
            {
                Name        = pointOfInterest.Name,
                Description = pointOfInterest.Description
            };

            patchDoc.ApplyTo(finalPointOfInterest);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            return(NoContent());
        }
        public IActionResult CreatePointOfInterest(int cityId, [FromBody] PointOfInterestForStuffDto pointOfInterest)
        {
            var city = CitiesDataStore.Current.Cities.FirstOrDefault(c => c.Id == cityId);

            if (city == null)
            {
                _logger.LogInformation($"City with id {cityId} is not found.");
                return(NotFound());
            }

            var maxId = CitiesDataStore.Current.Cities.SelectMany(c => c.PointsOfInterest).Max(p => p.Id);
            var finalPointOfInterest = new PointOfInterestDto()
            {
                Id          = ++maxId,
                Name        = pointOfInterest.Name,
                Description = pointOfInterest.Description
            };

            city.PointsOfInterest.Add(finalPointOfInterest);

            return(CreatedAtRoute("GetPointOfInterest", new { cityId, id = finalPointOfInterest.Id }, finalPointOfInterest));
        }