コード例 #1
0
ファイル: LikesService.cs プロジェクト: gdenchev99/PicMe
        public async Task <string> AddAsync(AddLikeModel model)
        {
            var user = await this.userRepository.All()
                       .FirstOrDefaultAsync(u => u.Id == model.UserId);

            var post = await this.postRepository.All()
                       .FirstOrDefaultAsync(p => p.Id == model.PostId);

            var like = new Like
            {
                User = user,
                Post = post,
            };

            var likeExists = this.likeRepository.All()
                             .Where(l => l.PostId == model.PostId)
                             .Any(l => l.UserId == model.UserId);

            await this.likeRepository.AddAsync(like);

            var result = await this.likeRepository.SaveChangesAsync() > 0;

            var postCreatorId = await this.likeRepository.All()
                                .Where(l => l.PostId == model.PostId)
                                .Select(l => l.Post.CreatorId)
                                .FirstOrDefaultAsync();

            return(postCreatorId);
        }
コード例 #2
0
ファイル: LikesService.cs プロジェクト: gdenchev99/PicMe
        public async Task <bool> RemoveAsync(AddLikeModel model)
        {
            var like = this.likeRepository.All()
                       .FirstOrDefault(l => l.PostId == model.PostId && l.UserId == model.UserId);

            this.likeRepository.Delete(like);

            var result = await this.likeRepository.SaveChangesAsync() > 0;

            return(result);
        }
コード例 #3
0
        public async Task <ActionResult <bool> > Create(AddLikeModel input)
        {
            var like = new Like
            {
                PostId = input.PostId,
                UserId = this.currentUser.UserId
            };

            await this.likes.Save(like);

            //TODO Send MEssage for notification
            return(true);
        }
コード例 #4
0
        public IActionResult UnlikeReview([FromBody] AddLikeModel model)
        {
            var currentUserId = int.Parse(User.Identity.Name);
            var like          = _mapper.Map <Like>(model);

            like.UserId = currentUserId;
            try
            {
                _forumService.UnlikeReview(like);
                return(Ok());
            }
            catch (AppException ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
        }
コード例 #5
0
ファイル: LikesController.cs プロジェクト: gdenchev99/PicMe
        public async Task <IActionResult> Remove([FromBody] AddLikeModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Model state is not valid"));
            }

            bool likeExists = await this.service.IsPostLikedByUserAsync(model.UserId, model.PostId);

            if (!likeExists)
            {
                return(BadRequest(new BadRequestViewModel {
                    Message = "You haven't liked this post."
                }));
            }

            var result = await this.service.RemoveAsync(model);

            return(Ok(result));
        }
コード例 #6
0
ファイル: LikeServiceTests.cs プロジェクト: gdenchev99/PicMe
        public async Task AddAsync_WithValidData_ShouldReturnPostCreatorId()
        {
            // Arrange
            var context         = InMemoryDbContext.Initiliaze();
            var likesRepository = new EfRepository <Like>(context);
            var usersRepository = new EfRepository <ApplicationUser>(context);
            var postsRepository = new EfRepository <Post>(context);
            var service         = new LikesService(likesRepository, usersRepository, postsRepository);

            await this.SeedUserAndPost(context);

            var model = new AddLikeModel {
                UserId = "userId", PostId = 52
            };

            // Act
            string expectedPostCreatorId = context.Posts.FirstOrDefault().CreatorId;
            string actualPostCreatorId   = await service.AddAsync(model);

            // Assert
            Assert.Equal(expectedPostCreatorId, actualPostCreatorId);
        }
コード例 #7
0
ファイル: LikeServiceTests.cs プロジェクト: gdenchev99/PicMe
        public async Task RemoveAsync_WithValidData_ShouldReturnTrue()
        {
            // Arrange
            var context         = InMemoryDbContext.Initiliaze();
            var likesRepository = new EfRepository <Like>(context);
            var usersRepository = new EfRepository <ApplicationUser>(context);
            var postsRepository = new EfRepository <Post>(context);
            var service         = new LikesService(likesRepository, usersRepository, postsRepository);

            await this.SeedUserAndPost(context);

            await this.SeedLikes(context);

            var model = new AddLikeModel {
                UserId = "userId", PostId = 52
            };

            // Act
            bool isLikeDeleted = await service.RemoveAsync(model);

            // Assert
            Assert.True(isLikeDeleted);
        }
コード例 #8
0
ファイル: LikeServiceTests.cs プロジェクト: gdenchev99/PicMe
        public async Task AddAsync_WithValidData_ShouldAddLikeToDatabase()
        {
            // Arrange
            var context         = InMemoryDbContext.Initiliaze();
            var likesRepository = new EfRepository <Like>(context);
            var usersRepository = new EfRepository <ApplicationUser>(context);
            var postsRepository = new EfRepository <Post>(context);
            var service         = new LikesService(likesRepository, usersRepository, postsRepository);

            await this.SeedUserAndPost(context);

            var model = new AddLikeModel {
                UserId = "userId", PostId = 52
            };

            // Act
            int expectedCount = context.Likes.Count() + 1;
            await service.AddAsync(model);

            int actualCount = context.Likes.Count();

            // Assert
            Assert.Equal(expectedCount, actualCount);
        }