public async Task <ActionResult> Details(int id, PagingParams pagingParams)
        {
            GetBoardModel getBoardModel = await Mediator.Send(new GetBoardQuery(id));

            var boardArticles = await Mediator.Send(new GetArticlesByIdsQuery(getBoardModel.ArticleIds, pagingParams));

            var moderatorPagingParams = new PagingParams {
                PageNumber = 1, PageSize = 5
            };
            var boardModerators = await Mediator.Send(new GetPublicUsersByIdsQuery(getBoardModel.ModeratorIds, moderatorPagingParams));

            string imageDataURL = "";

            if (getBoardModel.BoardImageId > 0)
            {
                GetImageModel img = await Mediator.Send(new GetImageByIdQuery(getBoardModel.BoardImageId));

                imageDataURL = _imageDataHelper.ConvertImageDataToDataUrl(img.ImageData, img.ContentType);
            }


            var model = new BoardDetailsViewModel
            {
                Board        = getBoardModel,
                ArticlePage  = new FrontendPage <GetArticleModel>(boardArticles),
                Moderators   = new FrontendPage <GetPublicUserModel>(boardModerators),
                ImageDataUrl = imageDataURL
            };

            return(View(model));
        }
        public IViewComponentResult Invoke(GetBoardModel boardModel)
        {
            var model = new BoardCardViewModel {
                Board = boardModel
            };

            return(View(model));
        }
        public async Task <IViewComponentResult> InvokeAsync(GetArticleModel articleModel, string imageDataUrl, bool displayText = false)
        {
            // TODO: test with deleted boards
            var           getBoardQuery = new GetBoardQuery(articleModel.BoardId);
            GetBoardModel board         = await getBoardQuery.DefaultIfExceptionAsync(_mediator);

            // TODO: returns null, which throws exception in view, if user is deleted
            var getuserQuery        = new GetPublicUserQuery(articleModel.UserId);
            GetPublicUserModel user = await getuserQuery.DefaultIfExceptionAsync(_mediator);

            string jwt = _apiJwtManager.GetToken();

            bool loggedIn           = false;
            bool saved              = false;
            bool userUpvoted        = false;
            bool userDownvoted      = false;
            bool userCreatedArticle = false;

            try
            {
                var loggedInUser = await _mediator.Send(new GetAuthenticatedUserQuery());

                if (loggedInUser != null)
                {
                    loggedIn = true;
                }
                saved              = loggedInUser.SavedArticles.Any(articleId => articleId == articleModel.Id);
                userUpvoted        = loggedInUser.LikedArticles.Any(articleId => articleId == articleModel.Id);
                userDownvoted      = loggedInUser.DislikedArticles.Any(articleId => articleId == articleModel.Id);
                userCreatedArticle = loggedInUser.ArticleIds.Any(articleId => articleId == articleModel.Id);
            }
            catch { }

            var viewModel = new ArticleCardViewModel
            {
                Article            = articleModel,
                Board              = board,
                User               = user,
                Jwt                = jwt,
                LoggedIn           = loggedIn,
                Saved              = saved,
                UserUpvoted        = userUpvoted,
                UserDownvoted      = userDownvoted,
                UserCreatedArticle = userCreatedArticle,
                ImageDataUrl       = imageDataUrl,
                DisplayText        = displayText,
                BaseUrl            = _baseUrl
            };

            return(View(viewModel));
        }
Example #4
0
        public async Task ShouldAddModerator()
        {
            // Arrange
            using var scope = Factory.Services.CreateScope();
            Assert.DoesNotContain(user.Id, board.Moderators.Select(bm => bm.UserId));

            var sut = new AddModeratorHandler(unitOfWork, mediator, mapper, currentUserServiceMock.Object);

            // Act
            GetBoardModel sutResult = await sut.Handle(new AddModeratorCommand(board.Id, user.Id), new CancellationToken(false));

            // Assert
            Assert.NotNull(sutResult);

            var updatedBoard = await unitOfWork.Boards.GetEntityAsync(sutResult.Id);

            Assert.Contains(user.Id, updatedBoard.Moderators.Select(bm => bm.UserId));
        }
Example #5
0
        public async Task <ViewResult> Details(int id, PagingParams pagingParams)
        {
            var articleModel = await Mediator.Send(new GetArticleQuery(id));

            var getArticleCommentsQuery = new GetCommentsByIdsQuery(articleModel.CommentIds, pagingParams);
            var articleComments         = await getArticleCommentsQuery.DefaultIfExceptionAsync(Mediator);

            var           getBoardQuery = new GetBoardQuery(articleModel.BoardId);
            GetBoardModel board         = await getBoardQuery.DefaultIfExceptionAsync(Mediator);

            var getUserQuery        = new GetPublicUserQuery(articleModel.UserId);
            GetPublicUserModel user = await getUserQuery.DefaultIfExceptionAsync(Mediator);

            var privateUser = await new GetAuthenticatedUserQuery().DefaultIfExceptionAsync(Mediator);

            var loggedIn = privateUser != null && privateUser.Id != 0;

            var savedArticle = loggedIn && privateUser.SavedArticles.Contains(id);

            var wroteArticle = loggedIn && privateUser.ArticleIds.Contains(id);

            string imageDataURL = "";

            if (articleModel.AssociatedImageId > 0)
            {
                GetImageModel img = await Mediator.Send(new GetImageByIdQuery(articleModel.AssociatedImageId));

                imageDataURL = _imageDataHelper.ConvertImageDataToDataUrl(img.ImageData, img.ContentType);
            }

            var viewModel = new ArticleDetailsViewModel
            {
                Article                = articleModel,
                Board                  = board,
                CommentPage            = new FrontendPage <GetCommentModel>(articleComments),
                LoggedIn               = loggedIn,
                User                   = user,
                UserSavedArticle       = savedArticle,
                UserWroteArticle       = wroteArticle,
                AssociatedImageDataUrl = imageDataURL
            };

            return(View(viewModel));
        }
        public async Task <ActionResult> Create(BoardCreateModel boardCreateModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(boardCreateModel));
            }

            GetBoardModel addedBoard = await Mediator.Send(new AddBoardCommand(boardCreateModel.Board));

            var file = Request.Form.Files.FirstOrDefault();

            if (file != null)
            {
                PostImageModel imageModel = _imageFileReader.ConvertImageFileToImageModel(file);
                await Mediator.Send(new AddBoardImageCommand(imageModel, addedBoard.Id));
            }

            return(RedirectToAction("Details", new { id = addedBoard.Id }));
        }
        public async Task <IViewComponentResult> InvokeAsync(GetBoardModel boardModel, string imageDataUrl)
        {
            var pagingParams = new PagingParams()
            {
                PageNumber = 1, PageSize = 5
            };
            var moderators = await _mediator.Send(new GetPublicUsersByIdsQuery(boardModel.ModeratorIds, pagingParams));

            bool loggedIn   = false;
            bool moderating = false;
            bool subscribed = false;

            try
            {
                var user = await _mediator.Send(new GetAuthenticatedUserQuery());

                loggedIn = user != null && user.Id > 0;

                moderating = loggedIn
                                ? user.BoardsModerating.Contains(boardModel.Id)
                                : false;

                subscribed = loggedIn
                                        ? user.BoardsSubscribed.Contains(boardModel.Id)
                                        : false;
            }
            catch { }

            var model = new BoardSidebarViewModel
            {
                Board         = boardModel,
                ModeratorPage = new FrontendPage <GetPublicUserModel>(moderators),
                LoggedIn      = loggedIn,
                Moderating    = moderating,
                Subscribed    = subscribed,
                ImageDataUrl  = imageDataUrl
            };

            return(View(model));
        }
 public ArticleCreationViewModel Create(GetBoardModel parentBoard)
 => new ArticleCreationViewModel(parentBoard, _ea, _viewManager, _articleApiClient);