using System; using System.Linq; using Domain; namespace Application { public class CommentService { private readonly ILinkRepository _linkRepository; private readonly ICommentRepository _commentRepository; private readonly ICurrentUserProvider _userProvider; private readonly IData _data; public CommentService(ILinkRepository linkRepository, ICommentRepository commentRepository, ICurrentUserProvider userProvider, IData data) { _linkRepository = linkRepository; _commentRepository = commentRepository; _userProvider = userProvider; _data = data; } public Guid PublishComment(PublishCommentCommand cmd) { var link = _linkRepository.GetById(cmd.LinkId); var comment = link.AddComment(_userProvider.GetCurrentUserId(), cmd.Content); _commentRepository.Add(comment); return comment.Id; } public CommentDTO[] GetAllLinkComments(Guid linkId) { return CommentDTOs(linkId).ToArray(); } public CommentDTO GetCommentById(Guid id) { return CommentDTOs().Single(comment => comment.Id == id); } private IQueryable CommentDTOs(Guid? linkId = null) { var comments = linkId.HasValue ? _data.Comments.Where(comment => comment.LinkId == linkId) : _data.Comments; return from comment in comments join user in _data.Users on comment.CreatedBy equals user.Id select new CommentDTO { Id = comment.Id, Content = comment.Content, UpvotesCount = 0, DownvotesCount = 0, CreatedByUsername = user.UserName }; // return comments // .OrderByDescending(comment => comment.CreatedAt) // .Select(comment => new CommentDTO // { // Id = comment.Id, // Content = comment.Content, // UpvotesCount = 0, // DownvotesCount = 0, // }); } } }