/// <summary> /// لیست نظرات یک محصول جهت نمایش /// </summary> /// <param name="productId"></param> /// <param name="pager"></param> /// <returns></returns> public async Task <IEnumerable <CommentSelectDto> > GetCommentsAsync(long productId, Pager pager, CancellationToken cancellationToken) { List <CommentSelectDto> model = await _commentRepo.TableNoTracking .Where(x => x.ProductId == productId && x.ParentId == null) .OrderByDescending(c => c.InsertDate) .Skip((pager.CurrentPage - 1) * pager.PageSize) .Take(pager.PageSize) .Select(sx => new CommentSelectDto() { Id = sx.Id, SenderName = sx.User.DisplayName ?? sx.User.UserName ?? "", InsertDate = sx.InsertDate, Title = sx.Title, Content = sx.Description, UserAvatar = sx.User.Avatar, ReplyCount = sx.Comments.Count }).ToListAsync(cancellationToken); DefaultLogo defultpictures = new DefaultLogo(); if (model.Any(p => p.UserAvatar == null)) { defultpictures = await _defaultLogoRepo.Table.FirstOrDefaultAsync(cancellationToken); } foreach (CommentSelectDto item in model) { item.UserAvatar = Url.ResolveServerUrl(_httpContextAccessor, VirtualPathUtility.ToAbsolute(item.UserAvatar ?? defultpictures.UserAvatarUrl ?? Url.DefaultUrl), false); } return(model); }
/// <summary> /// جزئیات نظر /// </summary> /// <param name="commentId"></param> /// <returns></returns> public async Task <CommentDetailDto> GetDetailsAsync(long commentId, CancellationToken cancellationToken) { CommentDetailDto model = await _commentRepo.TableNoTracking .Where(x => x.Id == commentId) .Select(sx => new CommentDetailDto() { Id = sx.Id, SenderName = sx.User.DisplayName ?? sx.User.UserName ?? "", InsertDate = sx.InsertDate, Title = sx.Title, Content = sx.Description, UserAvatar = sx.User.Avatar, Replies = sx.Comments.Select(p => new CommentDetailDto.RepliesCommentServiceModel() { Id = p.Id, SenderName = p.User.DisplayName ?? p.User.UserName ?? "", InsertDate = p.InsertDate, Title = p.Title, Content = p.Description, UserAvatar = p.User.Avatar }).ToList() }).FirstOrDefaultAsync(cancellationToken); DefaultLogo defultpictures = await _defaultLogoRepo.Table.FirstOrDefaultAsync(cancellationToken); if (model != null) { model.UserAvatar = Url.ResolveServerUrl(_httpContextAccessor, VirtualPathUtility .ToAbsolute(model.UserAvatar ?? defultpictures.UserAvatarUrl ?? Url.DefaultUrl), false); if (model.Replies != null) { foreach (CommentDetailDto.RepliesCommentServiceModel item in model.Replies) { item.UserAvatar = Url.ResolveServerUrl(_httpContextAccessor, VirtualPathUtility .ToAbsolute(item.UserAvatar ?? defultpictures.UserAvatarUrl ?? Url.DefaultUrl), false); } } } return(model); }