public async Task <IActionResult> Update([FromBody] UpdateAchievementModel model)
        {
            return(await ProcessAsync(async() =>
            {
                await _achievementService.Update(model);

                return Ok("Achievement updated.");
            }, Permissions.Behaviour.Achievements.EditAchievements));
        }
 public static Achievement GetEntity(UpdateAchievementModel updateModel)
 {
     return(new Achievement
     {
         Name = updateModel.Name,
         Description = updateModel.Description,
         XP = updateModel.XP,
         IconId = Guid.NewGuid()
     });
 }
Example #3
0
        public async Task <IActionResult> Update([FromBody] UpdateAchievementModel model)
        {
            try
            {
                await _behaviourService.UpdateAchievement(model);

                return(Ok());
            }
            catch (Exception e)
            {
                return(HandleException(e));
            }
        }
Example #4
0
        public async Task <ReadAchievementModel> UpdateAchievementAsync(UpdateAchievementModel model, Guid id, CancellationToken cancellationToken)
        {
            var achievement = await _achievementRepository.GetByIdAsync(id, cancellationToken);

            achievement.Name        = model.Name;
            achievement.Description = model.Description;

            var difference = achievement.XP - model.XP;

            if (difference != 0)
            {
                var pagingInfo = new PagingInfo
                {
                    CurrentPage = 1,
                    PageSize    = 0
                };
                var userAchievements = await _userAchievementRepository.GetAllUsersByAchievementAsync(pagingInfo, id, cancellationToken);

                foreach (var userAchievement in userAchievements.Data)
                {
                    if (userAchievement.Achievement.Id == id)
                    {
                        var user = await _userRepository.GetByIdAsync(userAchievement.User.Id, cancellationToken);

                        user.XP -= difference;
                        user.XP  = user.XP >= 0 ? user.XP : 0;

                        _userRepository.Update(user);

                        await _unitOfWork.SaveChangesAsync(cancellationToken);
                    }
                }
            }

            achievement.XP     = model.XP;
            achievement.IconId = await _fileService.AddOrUpdateFileByIdAsync(model.Icon, achievement.IconId, cancellationToken);

            _achievementRepository.Update(achievement);

            await _unitOfWork.SaveChangesAsync(cancellationToken);

            return(_mapper.Map <ReadAchievementModel>(achievement));
        }
Example #5
0
        public async Task <IActionResult> UpdateAchievementAsync([FromForm] UpdateAchievementModel model, Guid achievementId, CancellationToken cancellationToken)
        {
            var achievement = await _achievementService.GetAchievementByIdAsync(achievementId, cancellationToken);

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

            var resultValidation = await _updateAchievementModelValidator.ValidateAsync(model, cancellationToken);

            resultValidation.AddToModelState(ModelState, null);

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

            var item = await _achievementService.UpdateAchievementAsync(model, achievementId, cancellationToken);

            return(Ok(item));
        }
        public async Task UpdateAchievementAsync_UpdateAchievementModel_ReturnsReadAchievementModel(UpdateAchievementModel model)
        {
            //Arrange
            var achievement       = AchievementDumbData.GetEntity(model);
            var user              = UserDumbData.GetRandomEntity();
            var userAchievements  = UserAchievementDumbData.GetRandomEntities(5, user, achievement);
            var returnPagingInfo  = ReturnPagingInfoDumbData.GetForModel(new PagingInfo(), userAchievements);
            var expectedValue     = _mapper.Map <ReadAchievementModel>(achievement);
            var cancellationToken = new CancellationToken();

            _achievementRepository.Setup(x => x.GetByIdAsync(It.IsAny <Guid>(), cancellationToken)).Returns(Task.FromResult(achievement));
            _userAchievementRepository.Setup(x => x.GetAllUsersByAchievementAsync(It.IsAny <PagingInfo>(), It.IsAny <Guid>(), cancellationToken)).Returns(Task.FromResult(returnPagingInfo));
            _userRepository.Setup(x => x.GetByIdAsync(It.IsAny <Guid>(), cancellationToken)).Returns(Task.FromResult(user));
            _achievementRepository.Setup(x => x.Update(It.IsAny <Achievement>()));
            _fileService.Setup(x => x.AddOrUpdateFileByIdAsync(It.IsAny <IFormFile>(), It.IsAny <Guid?>(), cancellationToken)).Returns(Task.FromResult(expectedValue.IconId));
            _unitOfWork.Setup(x => x.SaveChangesAsync(cancellationToken)).Returns(Task.CompletedTask);

            // Act
            var response = await _achievementService.UpdateAchievementAsync(model, achievement.Id, cancellationToken);

            // Assert
            _achievementRepository.Verify(x => x.GetByIdAsync(It.IsAny <Guid>(), cancellationToken), Times.Once);
            _achievementRepository.Verify(x => x.Update(It.IsAny <Achievement>()), Times.Once);
            _fileService.Verify(x => x.AddOrUpdateFileByIdAsync(It.IsAny <IFormFile>(), It.IsAny <Guid?>(), cancellationToken), Times.Once);
            _unitOfWork.Verify(x => x.SaveChangesAsync(cancellationToken), Times.Once);
            response.Should().BeEquivalentTo(expectedValue);
        }