public IActionResult UpdateRestaurant(int id, [FromBody] RestaurantForUpdateDto restaurant)
        {
            try
            {
                if (restaurant == null)
                {
                    _logger.LogError("restaurant object sent from client is null.");
                    return(BadRequest("restaurant object is null"));
                }
                if (!ModelState.IsValid)
                {
                    _logger.LogError("Invalid restaurant object sent from client.");
                    return(BadRequest("Invalid model object"));
                }

                var restaurantEntity = _repository.Restaurant.GetRestaurantById(id);
                if (restaurantEntity == null)
                {
                    _logger.LogError($"restaurant with id: {id}, hasn't been found in db.");
                    return(NotFound());
                }

                _mapper.Map(restaurant, restaurantEntity);

                _repository.Restaurant.UpdateRestaurant(restaurantEntity);
                _repository.Save();

                return(NoContent());
            }
            catch (Exception ex)
            {
                _logger.LogError($"Something went wrong inside UpdateRestaurant action: {ex.InnerException.Message}");
                return(StatusCode(500, "Internal server error"));
            }
        }
        public IActionResult UpdatedRestaurant(int cityId, int id,
                                               [FromBody] RestaurantForUpdateDto restaurant)
        {
            if (restaurant.Description == restaurant.Name)
            {
                ModelState.AddModelError("Description", "The provided description should be different from the name");
            }

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

            var city = CitiesDataStore.Current.Cities.FirstOrDefault(c => c.Id == cityId);

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

            var restaurantFromStore = city.Restaurants.FirstOrDefault(r => r.Id == id);

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

            restaurantFromStore.Name        = restaurant.Name;
            restaurantFromStore.Description = restaurant.Description;

            return(NoContent());//most common for update
        }
        public async Task <IActionResult> UpdateRestaurant(int id, [FromBody] RestaurantForUpdateDto restaurant)
        {
            try
            {
                if (restaurant == null)
                {
                    _logger.LogError("Restaurant object sent from client is null.");
                    return(BadRequest("Restaurant object is null"));
                }

                if (!ModelState.IsValid)
                {
                    _logger.LogError("Invalid restaurant object sent from client.");
                    return(BadRequest("Invalid model object"));
                }

                var restaurantEntity = await _repository.Restaurant.GetRestaurantById(id);

                if (restaurantEntity == null)
                {
                    _logger.LogError($"Restaurant with id: {id}, has not been found in the db.");
                    return(NotFound());
                }

                _mapper.Map(restaurant, restaurantEntity);
                _repository.Restaurant.UpdateRestaurant(restaurantEntity);
                await _repository.Save();

                return(NoContent());
            }
            catch
            {
                throw new Exception("Exception while updating restaurant from db");
            }
        }
        public async Task <IActionResult> UpdateRestaurant(Guid restaurantId,
                                                           RestaurantForUpdateDto restaurant)
        {
            var restaurantFromRepo = await _knockRepository.GetRestaurantAsync(restaurantId);

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

            _mapper.Map(restaurant, restaurantFromRepo);

            // save changes
            await _knockRepository.SaveChangesAsync();

            return(NoContent());
        }
        public IActionResult PartiallyUpdateRestaurant(int cityId, int id,
                                                       [FromBody] JsonPatchDocument <RestaurantForUpdateDto> patchDoc)
        {
            var city = CitiesDataStore.Current.Cities.FirstOrDefault(c => c.Id == cityId);

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

            var restaurantFromStore = city.Restaurants.FirstOrDefault(r => r.Id == id);

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

            var restaurantToPatch = new RestaurantForUpdateDto
            {
                Name        = restaurantFromStore.Name,
                Description = restaurantFromStore.Description
            };

            patchDoc.ApplyTo(restaurantToPatch, ModelState);

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

            if (restaurantToPatch.Description == restaurantToPatch.Name)
            {
                ModelState.AddModelError("Description", "The provided description should be different from the name");
            }

            if (!TryValidateModel(restaurantToPatch))
            {
                return(BadRequest(ModelState));
            }

            restaurantFromStore.Name        = restaurantToPatch.Name;
            restaurantFromStore.Description = restaurantToPatch.Description;

            return(NoContent());//most common for update
        }
        public async Task <IActionResult> PutRestaurant(int id, RestaurantForUpdateDto restaurant)
        {
            var restaurantFromRepo = await _restaurantsRepository.GetAsync(id);

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

            _mapper.Map(restaurant, restaurantFromRepo);

            _restaurantsRepository.Update(restaurantFromRepo);

            if (await _restaurantsRepository.SaveChangesAsync())
            {
                return(NoContent());
            }

            return(BadRequest());
        }
        public async Task <IActionResult> CreateRestaurant(int hotelId, RestaurantForUpdateDto restaurantForUpdateDto)
        {
            if (restaurantForUpdateDto == null)
            {
                return(BadRequest());
            }

            var restaurantEntity = _mapper.Map <Restaurant>(restaurantForUpdateDto);

            restaurantEntity.HotelId = hotelId;

            _repo.Add(restaurantEntity);

            if (await _unitOfWork.CompleteAsync())
            {
                var restaurantToReturn = _mapper.Map <RestaurantForUpdateDto>(restaurantEntity);
                return(CreatedAtRoute("GetRestaurant", new { id = restaurantEntity.Id }, restaurantToReturn));
            }

            throw new Exception("Creating the restaurant failed on save");
        }
        public async Task <IActionResult> Update(int id, RestaurantForUpdateDto restaurantForUpdateDto)
        {
            if (restaurantForUpdateDto == null)
            {
                return(BadRequest());
            }

            var restaurantFromRepo = await _repo.GetRestaurant(id);

            if (restaurantFromRepo == null)
            {
                return(NotFound($"Could not find restaurant with an ID of {id}"));
            }

            _mapper.Map(restaurantForUpdateDto, restaurantFromRepo);

            if (await _unitOfWork.CompleteAsync())
            {
                return(NoContent());
            }

            throw new Exception($"Updating restaurant {id} failed on save");
        }