Exemplo n.º 1
0
        public async Task <IActionResult> CreateComment([FromBody] AddCommentResource commentResource)
        {
            Models.Photo photo = await this.photoRepository.GetAsync(commentResource.PhotoId);

            Models.Comment parentComment = commentResource.ParentId.HasValue ? await commentRepository.GetAsync(commentResource.ParentId.Value) : null;

            bool isParentCommentFromSamePhoto = (parentComment != null) && (parentComment.Photo.Id == commentResource.PhotoId);

            if (photo != null && (!commentResource.ParentId.HasValue || isParentCommentFromSamePhoto))
            {
                var comment     = this.mapper.Map <AddCommentResource, Models.Comment>(commentResource);
                var currentUser = new Models.User()
                {
                    UserName = User.FindFirstValue(ClaimTypes.Name)
                };
                comment.Author = this.userRepository.GetOrAdd(currentUser);
                comment.Photo  = photo;
                this.commentRepository.Add(comment);
                await this.unitOfWork.CompleteAsync();

                CommentResource resourceResult = mapper.Map <Models.Comment, CommentResource>(comment);
                resourceResult.ConnectionId = commentResource.ConnectionId;
                NotifyCommentAdded(comment.Id, commentResource.ConnectionId);

                return(Ok(resourceResult));
            }
            else
            {
                return(BadRequest());
            }
        }
Exemplo n.º 2
0
        public Models.User GetOrAdd(Models.User user)
        {
            string userName = user.UserName;

            Models.User existingUser = GetByUserName(userName);
            if (existingUser != null)
            {
                return(existingUser);
            }
            else
            {
                user.Id = System.Guid.NewGuid().ToString("B");
                this.context.Users.Add(user);
                return(user);
            }
        }