コード例 #1
0
        public async Task UpdateAsync(UpdateForum command)
        {
            await _updateValidator.ValidateCommandAsync(command);

            var forum = await _dbContext.Forums
                        .Include(x => x.Category)
                        .FirstOrDefaultAsync(x =>
                                             x.Category.SiteId == command.SiteId &&
                                             x.Id == command.Id &&
                                             x.Status != ForumStatusType.Deleted);

            if (forum == null)
            {
                throw new DataException($"Forum with Id {command.Id} not found.");
            }

            var originalCategoryId = forum.CategoryId;

            if (originalCategoryId != command.CategoryId)
            {
                forum.Category.DecreaseTopicsCount(forum.TopicsCount);
                forum.Category.DecreaseRepliesCount(forum.RepliesCount);

                var newCategory = await _dbContext.Categories.FirstOrDefaultAsync(x => x.Id == command.CategoryId);

                newCategory.IncreaseTopicsCount(forum.TopicsCount);
                newCategory.IncreaseRepliesCount(forum.RepliesCount);

                await ReorderForumsInCategory(originalCategoryId, command.Id, command.SiteId, command.UserId);

                var newCategoryForumsCount = await _dbContext.Forums
                                             .Where(x => x.CategoryId == command.CategoryId && x.Status != ForumStatusType.Deleted)
                                             .CountAsync();

                forum.Reorder(newCategoryForumsCount + 1);
            }

            forum.UpdateDetails(command.CategoryId, command.Name, command.Slug, command.Description, command.PermissionSetId);

            _dbContext.Events.Add(new Event(command.SiteId,
                                            command.UserId,
                                            EventType.Updated,
                                            typeof(Forum),
                                            forum.Id,
                                            new
            {
                forum.Name,
                forum.Slug,
                forum.Description,
                forum.CategoryId,
                forum.PermissionSetId
            }));

            await _dbContext.SaveChangesAsync();

            _cacheManager.Remove(CacheKeys.Forum(command.Id));
            _cacheManager.Remove(CacheKeys.CurrentForums(command.SiteId));
        }
コード例 #2
0
        public void ValidateUpdateForum_ObjectOk_ValidationSucceeds()
        {
            var request = new UpdateForum
            {
                Description = "Description"
            };

            var context = new ValidationContext(request);
            var result  = Validator.TryValidateObject(request, context, null, true);

            Assert.True(result);
        }
コード例 #3
0
        public void ValidateUpdateForum_NoDescription_ValidationFails()
        {
            var request = new UpdateForum();

            var context = new ValidationContext(request)
            {
                MemberName = nameof(request.Description)
            };
            var result = Validator.TryValidateProperty(request.Description, context, null);

            Assert.False(result);
        }
コード例 #4
0
        public async Task <ActionResult <ForumResponse> > Update(int id, [FromBody] UpdateForum update)
        {
            var forum = await _forumService.Update(id, update);

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

            var response = _mapper.Map <ForumResponse>(forum);

            response.Owner = _userService.Auth().Username;
            return(Ok(response));
        }
コード例 #5
0
        public void ValidateUpdateForum_DescriptionTooLong_ValidationFails()
        {
            var request = new UpdateForum
            {
                Description = new string('a', 1024)
            };

            var context = new ValidationContext(request)
            {
                MemberName = nameof(request.Description)
            };
            var result = Validator.TryValidateProperty(request.Description, context, null);

            Assert.False(result);
        }
コード例 #6
0
        public async Task <Forum> Update(int id, UpdateForum update)
        {
            var forum = await _forumRepository.Read(id);

            _mapper.Map(update, forum);

            if (!CanEdit(forum))
            {
                _logger.LogInformation($"User cannot update forum {id}");
                return(null);
            }

            _logger.LogInformation($"Updating forum {id} {JsonConvert.SerializeObject(update)}");
            await _forumRepository.Update(forum);

            return(forum);
        }
コード例 #7
0
        public async Task <ActionResult> Update(FormComponentModel.ForumModel model)
        {
            var site = await _contextService.CurrentSiteAsync();

            var user = await _contextService.CurrentUserAsync();

            var command = new UpdateForum
            {
                Id              = model.Id,
                CategoryId      = model.CategoryId,
                Name            = model.Name,
                Slug            = model.Slug,
                Description     = model.Description,
                PermissionSetId = model.PermissionSetId == Guid.Empty ? (Guid?)null : model.PermissionSetId,
                SiteId          = site.Id,
                UserId          = user.Id
            };

            await _forumService.UpdateAsync(command);

            return(Ok());
        }
コード例 #8
0
        public void MapForum_FromUpdateForum_UpdatesDescriptionAndUpdatedAt()
        {
            var request = new UpdateForum
            {
                Description = "Test"
            };
            var yesterday = DateTime.Today.AddDays(-1);
            var oldForum  = new Forum
            {
                Id          = 1,
                Title       = "Test",
                Description = null,
                CreatedAt   = yesterday,
                UpdatedAt   = yesterday
            };

            var forum = Mapper.Map(request, oldForum);

            Assert.Equal(1, forum.Id);
            Assert.Equal("Test", forum.Title);
            Assert.Equal(request.Description, forum.Description);
            Assert.Equal(yesterday, forum.CreatedAt);
            Assert.NotEqual(yesterday, forum.UpdatedAt);
        }