public async Task <IActionResult> AllPosts() { // Get all posts. var postsQuery = new GetPostsQuery(); var postsDTO = await _mediator.Send(postsQuery); var posts = postsDTO.OrderByDescending(post => post.Date); var models = _mapper.Map <IEnumerable <PostDTO>, IEnumerable <PostViewModel> >(posts); foreach (var model in models) { var authorQuery = new GetAuthorQuery { Id = model.AuthorId }; var author = await _mediator.Send(authorQuery); var topicQuery = new GetTopicQuery { Id = model.TopicId }; var topic = await _mediator.Send(topicQuery); model.Author = author.FirstName + " " + author.LastName; model.Topic = topic.Text; } return(View(models)); }
public async Task Handle_GivenValidId_ReturnsAuthorDTO() { // Arrange var author = new AuthorDTO { Id = 1, UserId = "QWERTY1234567890_One", FirstName = "FirstName_One", LastName = "LastName_One", BirthDate = new DateTime(1988, 01, 01), }; var query = new GetAuthorQuery { Id = 1 }; // Act var handler = new GetAuthorQuery.GetAuthorQueryHandler(Context, Mapper); var result = await handler.Handle(query, CancellationToken.None); // Assert result.ShouldBeOfType <AuthorDTO>(); result.ShouldNotBeNull(); result.Id.ShouldBe(author.Id); result.UserId.ShouldBe(author.UserId); result.FirstName.ShouldBe(author.FirstName); result.LastName.ShouldBe(author.LastName); result.BirthDate.ShouldBe(author.BirthDate); }
public async Task <ActionResult <AuthorViewModel> > Get(bool includeProfile) { var query = new GetAuthorQuery() { IncludeProfile = includeProfile }; return(this.OkOrNotFound(await _mediator.Send(query))); }
public async Task GetAuthorQueryHandler_ReturnsAuthor() { await AddAuthor(); var getAuthorQueryHandler = new GetAuthorQueryHandler(TestContext.CreateHandlerContext <AuthorViewModel>(RequestDbContext), _authorService); var message = new GetAuthorQuery() { IncludeProfile = true }; var result = await getAuthorQueryHandler.Handle(message, CancellationToken.None); Assert.Equal("Tom", result.FirstName); }
public async Task Handle_GivenInvalidId_ReturnsNull() { // Arrange var query = new GetAuthorQuery { Id = 99 }; // Act var handler = new GetAuthorQuery.GetAuthorQueryHandler(Context, Mapper); var result = await handler.Handle(query, CancellationToken.None); // Assert result.ShouldBeNull(); }
public async Task GetAuthorTest() { var authorToGet = _authorFaker.Generate(); _dbContext.GetAuthor(authorToGet.Id).Returns(authorToGet); var getAuthorQueryHandler = new GetAuthorQueryHandler(_dbContext); var getAuthorQuery = new GetAuthorQuery { Id = authorToGet.Id }; var author = await getAuthorQueryHandler.Handle(getAuthorQuery, CancellationToken.None); author.Should().Be(authorToGet); }
public async Task <IActionResult> Index(int id = default) { IRequest <ICollection <PostDTO> > postsQuery; if (id == default) { postsQuery = new GetPostsQuery(); } else { postsQuery = new GetPostsByAuthorIdQuery { AuthorId = id } }; // Get all posts. var postsDTO = await _mediator.Send(postsQuery); var posts = postsDTO.OrderByDescending(post => post.Date); var models = _mapper.Map <IEnumerable <PostDTO>, IEnumerable <PostViewModel> >(posts); foreach (var model in models) { var authorQuery = new GetAuthorQuery { Id = model.AuthorId }; var author = await _mediator.Send(authorQuery); var topicQuery = new GetTopicQuery { Id = model.TopicId }; var topic = await _mediator.Send(topicQuery); model.AuthorId = author.Id; model.Author = author.FirstName + " " + author.LastName; model.Topic = topic.Text; } return(View(models)); }
public IActionResult GetAuthor(Guid id) { if (ModelState.IsValid) { GetAuthorQuery getAuthor = new GetAuthorQuery(id); try { var result = _messages.Dispatch(getAuthor); return(Ok(result)); } catch (DomainException ex) { _logger.LogError(ex.Message); return(Error(ex.Message)); } catch (Exception ex) { _logger.LogCritical(ex.Message); return(StatusCode(500)); } } return(BadRequest()); }
public async Task <IActionResult> Get([FromRoute] Guid authorId) { var getAuthorQuery = new GetAuthorQuery { Id = authorId }; try { var author = await _mediator.Send(getAuthorQuery); if (author is null) { return(NotFound()); } var response = _mapper.Map <Author, GetAuthorResponse>(author); return(Ok(response)); } catch (Exception e) { return(BadRequest(e.ToString())); } }
//[HttpPost] public async Task <IActionResult> Delete(int id) { var authorQuery = new GetAuthorQuery { Id = id }; var authorDTO = await _mediator.Send(authorQuery); if (authorDTO == null) { return(NotFound()); } var result = await _identityService.DeleteUserAsync(authorDTO.UserId); if (result.Succeeded) { var authorCommand = new DeleteAuthorCommand { Id = id }; await _mediator.Send(authorCommand); } return(RedirectToAction("Index", "Authors")); }
public async Task <IActionResult> Read(int id) { if (id == default) { return(NotFound()); } // Get post. var postQuery = new GetPostQuery { Id = id }; var post = await _mediator.Send(postQuery); // Add author information. var authorQuery = new GetAuthorQuery { Id = post.AuthorId }; var author = await _mediator.Send(authorQuery); post.Author = author.FirstName + " " + author.LastName; // Add topic information. var topicQuery = new GetTopicQuery { Id = post.TopicId }; var topic = await _mediator.Send(topicQuery); post.Topic = topic.Text; // Get comments for current post. var commentsQuery = new GetCommentsByPostIdQuery { PostId = post.Id }; var comments = await _mediator.Send(commentsQuery); // Create post view model. var model = _mapper.Map <PostDTO, PostViewModel>(post); model.AuthorAvatar = author.Avatar; // Check current user if he/she is an author of the current post. var userName = HttpContext.User.Identity.Name; if (userName == null) { model.CurrentReaderId = default; } else { var userId = await _identityService.GetUserIdByNameAsync(userName); var reader = await _mediator.Send(new GetAuthorByUserIdQuery { UserId = userId }); if (reader == null) { model.CurrentReaderId = default; } else { model.CurrentReaderId = reader.Id; } } // Check post comments model.Comments = _mapper.Map <ICollection <CommentDTO>, ICollection <CommentViewModel> >(comments); foreach (var comment in model.Comments) { var commentAuthorQuery = new GetAuthorQuery { Id = comment.AuthorId }; var commentAuthor = await _mediator.Send(commentAuthorQuery); comment.Author = commentAuthor.FirstName + " " + commentAuthor.LastName; (var age, var units) = comment.Date.Age(); comment.Age = age; comment.AgeUnits = units; comment.AuthorAvatar = commentAuthor.Avatar; } return(View(model)); }
public Task <AuthorCommonResult> GetAuthor( [FromRoute] GetAuthorQuery query) => Mediator.Send(query);
public override async Task <Author> GetAuthor(GetAuthorQuery request, ServerCallContext context) { return(await dbContext.Authors .SingleOrDefaultAsync(author => author.AuthorId == request.Id)); }
/// <summary> /// Show user profile page. /// </summary> /// <param name="id">Author identifier.</param> /// <returns>User profile page.</returns> public async Task <ActionResult> Index(int id) { if (id <= 0) { return(RedirectToAction("Index", "Home")); } // Get author current author. var authorQuery = new GetAuthorQuery { Id = id }; var authorDTO = await _mediator.Send(authorQuery); authorDTO.Email = await _identityService.GetEmailByIdAsync(authorDTO.UserId); // Calculate author statistics. var postsQuery = new GetPostsByAuthorIdQuery { AuthorId = authorDTO.Id }; var postsDTO = await _mediator.Send(postsQuery); var postsNumber = postsDTO.Count; var commentsQuery = new GetCommentsByAuthorIdQuery { AuthorId = authorDTO.Id }; var commentsDTO = await _mediator.Send(commentsQuery); var commentsNumber = commentsDTO.Count; // Check current user if he / she is an author of the current post. var userName = HttpContext.User.Identity.Name; int currentReaderId; if (userName == null) { currentReaderId = default; } else { var userId = await _identityService.GetUserIdByNameAsync(userName); var reader = await _mediator.Send(new GetAuthorByUserIdQuery { UserId = userId }); if (reader == null) { currentReaderId = default; } else { currentReaderId = reader.Id; } } var model = _mapper.Map <AuthorDTO, ProfileViewModel>(authorDTO); model.Age = authorDTO.BirthDate.Age(AgeUnits.Year); model.TotalPostsNumber = postsNumber; model.TotalCommentsNumber = commentsNumber; model.Posts = postsDTO; model.CurrentReaderId = currentReaderId; model.BirthDate = authorDTO.BirthDate.ToString("MMMM d, yyyy"); return(View(model)); }