Ejemplo n.º 1
0
        public async Task <IActionResult> EditTodoItem(EditTodoItemViewModel editTodoItemViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            // create an TodoItemForUpdateViewModel instance
            var todoItemForUpdateViewModel = new TodoItemForUpdateViewModel {
                Name = editTodoItemViewModel.Name, IsComplete = editTodoItemViewModel.IsComplete
            };

            // serialize it
            var serializedTodoItemForUpdateViewModel = JsonConvert.SerializeObject(todoItemForUpdateViewModel);

            // call the API
            var httpClient = await _iTodoApiHttpClient.GetClient();

            var response = await httpClient.PutAsync(
                $"api/todoitems/{editTodoItemViewModel.Id}",
                new StringContent(serializedTodoItemForUpdateViewModel, Encoding.Unicode, "application/json"))
                           .ConfigureAwait(false);

            return(HandleApiResponse(response, () => RedirectToAction("Index")));
        }
        public IActionResult UpdateTodoItem(long id, [FromBody] TodoItemForUpdateViewModel todoItemForUpdateViewModel)
        {
            var ownerId = User.Claims.FirstOrDefault(claim => claim.Type == "sub")?.Value; // this is how we know who the current user is.

            if (!_todoRepository.IsTodoItemOwner(id, ownerId))
            {
                return(StatusCode(403));
            }

            if (todoItemForUpdateViewModel == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                // return 422 - Unprocessable Entity when validation fails
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            var todoItem = _todoRepository.GetTodoItem(id);

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

            Mapper.Map(todoItemForUpdateViewModel, todoItem);

            _todoRepository.UpdateTodoItem(todoItem);

            if (!_todoRepository.Save())
            {
                throw new Exception($"Updating todoitem with {id} failed on save.");
            }

            return(NoContent());
        }