コード例 #1
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var observer =
                    await _context.Users.SingleOrDefaultAsync(x => x.UserName == _userAccessor.GetCurrentUser());

                if (observer == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { user = "******" });
                }

                var target = await _context.Users.SingleOrDefaultAsync(x => x.UserName == request.Username);

                if (target == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { user = "******" });
                }

                // check if user was already following
                var following =
                    await _context.Followings.SingleOrDefaultAsync(x =>
                                                                   x.ObserverId == observer.Id && x.TargetId == target.Id);

                if (following != null)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { following = "You are already following this user" });
                }

                following = new UserFollowings
                {
                    Observer = observer,
                    Target   = target
                };

                _context.Followings.Add(following);

                var success = await _context.SaveChangesAsync() > 0;

                if (success)
                {
                    return(Unit.Value);
                }
                throw new Exception("Problem saving changes");
            }
コード例 #2
0
            public async Task <FollowDto> Handle(Command request,
                                                 CancellationToken cancellationToken)
            {
                var observer = await _context.Users.SingleOrDefaultAsync(x =>
                                                                         x.UserName == _userAccessor.GetCurrentUsername());

                var target = await _context.Users.SingleOrDefaultAsync(x =>
                                                                       x.UserName == request.Username);

                if (target == null)
                {
                    throw new RestException(HttpStatusCode.NotFound,
                                            new { User = "******" });
                }

                var following = await _context.Followings
                                .FirstOrDefaultAsync(x => x.ObserverId == observer.Id &&
                                                     x.TargetId == target.Id);

                if (following == null)
                {
                    following = new UserFollowings
                    {
                        Observer = observer,
                        Target   = target
                    };

                    _context.Followings.Add(following);
                    await _context.SaveChangesAsync();
                }

                return(new FollowDto
                {
                    DisplayName = observer.DisplayName,
                    Username = observer.UserName,
                    Image = observer.Photos.FirstOrDefault(x => x.IsMain)?.Url,
                    FollowersCount = observer.Followers.Count()
                });
            }
コード例 #3
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var observer =
                    await _context.Users.FirstOrDefaultAsync(x => x.UserName ==
                                                             _userAccessor.GetCurrentUsername());

                var target = await _context.Users.FirstOrDefaultAsync(x => x.UserName ==
                                                                      request.Username);

                if (target == null)
                {
                    throw new RestException(HttpStatusCode.NotFound);
                }

                var following = await _context.Followings.FirstOrDefaultAsync(x =>
                                                                              x.ObserverId == observer.Id && x.TargetId == target.Id);

                if (following == null)
                {
                    following = new UserFollowings
                    {
                        Observer = observer,
                        Target   = target
                    };

                    _context.Followings.Add(following);

                    var success = await _context.SaveChangesAsync() > 0;

                    if (success)
                    {
                        return(Unit.Value);
                    }
                }

                throw new Exception("Problem adding following");
            }
コード例 #4
0
 public HomeController()
 {
     _context        = new ApplicationDbContext();
     _userFollowings = new UserFollowings(_context);
 }