/// <summary> /// Calls WebApi to get Temperament for single dog. /// </summary> /// <param name="id">Dog Id <see cref="int" /></param> public async Task GetTemperament(int id) { tabIndex = 0; NewTemperament(); // get dog's temperament HttpResponseMessage response = await _http.GetAsync($"api/Temperament/{id}"); if (response.IsSuccessStatusCode) { // set biography instance into state Temperament = await response.Content.ReadFromJsonAsync <DogTemperament>(); // user is authorized to edit temperament isAuthorized = true; } else if (response.StatusCode == HttpStatusCode.Unauthorized) { // user is not authorized to edit this biography (likely not owner) _notification.DisplayMessage(NotificationType.NotAuthorizedOwnerEditError); _navigate.ToAllDoggos(); return; } // notify subscribers state has changed if (Temperament != null) { NotifyStateChanged(); } }
public async Task <ActionResult <DogTemperament> > Get(int id) { string requestUser = GetUserId(); DogTemperament temperament = await _service.GetDogTemperament(id); if (temperament != null) { // ensure user requesting temperament is the dog's owner if (requestUser == temperament.OwnerId) { return(Ok(temperament)); } else { _logger.LogWarning($"Request user ({requestUser}) does not have permission (non-owner) to get dog temperament for dog id {temperament.DogId} owned by {temperament.OwnerId}"); } return(Unauthorized()); } else // create new dog temperament if it does not yet exist { string ownerId = await _userService.GetOwnerIdByDogId(id); // create and return new temperament if requester is dog owner if (ownerId == requestUser) { return(Ok(await _service.CreateTemperament(id, requestUser))); } else { _logger.LogWarning($"Request user ({requestUser}) does not have permission (non-owner) to create new dog temperament for dog owned by {ownerId}"); } return(Unauthorized()); } }
public async Task <IActionResult> Put(int id, DogTemperament temperament) { if (id != temperament.DogId) { return(BadRequest()); } // ensure user attempting to update temperament is the dog owner string dogOwnerId = await _userService.GetOwnerIdByDogId(temperament.DogId); string requestUser = GetUserId(); if (dogOwnerId == requestUser) { bool success = await _service.UpdateTemperament(temperament, requestUser); if (success) { return(Ok()); } else { _logger.LogError($"Failed to save Temperament for {temperament.DogId} by {requestUser}"); } return(BadRequest()); } else { // unauthorized: user attempting to update temperament is not the owner _logger.LogWarning($"Request user ({requestUser}) does not have the permission (non-owner) to update dog temperament for dog id {temperament.DogId} owned by {dogOwnerId}"); return(Unauthorized()); } }
/// <summary> /// Updates single <see cref="Temperament"/> entity /// </summary> /// <param name="temperament"> /// <see cref="DogTemperament"/> instance with which to update existing record /// </param> /// <param name="userId">User Id string</param> /// <returns>Updated (mapped) <see cref="DogTemperament"/> instance</returns> public async Task <bool> UpdateTemperament(DogTemperament temperament, string userId) { Temperament temperamentEntity = await _repository.FindTemperament(temperament.DogId); _mapper.Map(temperament, temperamentEntity); temperamentEntity.LastModified = DateTime.Now; temperamentEntity.LastModifiedBy = userId; bool updated = await _repository.SaveTemperament(temperamentEntity); if (updated) { return(true); } else { return(false); } }
/// <summary> /// Initializes new <see cref="DogTemperament"/> instance in state. /// </summary> public void NewTemperament() => Temperament = new DogTemperament();