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)); }
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); }
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); }
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)); }
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); }
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); }
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()); }
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); }