Example #1
0
        /// <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();
            }
        }
Example #2
0
        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());
            }
        }
Example #3
0
        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());
            }
        }
Example #4
0
        /// <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);
            }
        }
Example #5
0
 /// <summary>
 /// Initializes new <see cref="DogTemperament"/> instance in state.
 /// </summary>
 public void NewTemperament() => Temperament = new DogTemperament();