Ejemplo n.º 1
0
            public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken)
            {
                var observer = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername());

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

                if (target == null)
                {
                    return(null);
                }

                var following = await _context.UserFollowings.FindAsync(observer.Id, target.Id);

                if (following == null)
                {
                    following = new Domain.UserFollowing
                    {
                        Observer = observer,
                        Target   = target
                    };
                    _context.UserFollowings.Add(following);
                }
                else
                {
                    _context.UserFollowings.Remove(following);
                }
                var success = await _context.SaveChangesAsync() > 0;

                if (success)
                {
                    return(Result <Unit> .Success(Unit.Value));
                }

                return(Result <Unit> .Failure("Failed to update following"));
            }
Ejemplo n.º 2
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                //handler logic goes here

                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 RestExceptions(System.Net.HttpStatusCode.NotFound, new { User = "******" });
                }

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

                if (following != null)
                {
                    throw new RestExceptions(System.Net.HttpStatusCode.NotFound, new { User = "******" });
                }

                if (following == null)
                {
                    following = new Domain.UserFollowing
                    {
                        Observer = observer,
                        Target   = target
                    };

                    _context.Followings.Add(following);
                }


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

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

                throw new Exception("Problem occur saving changes");
            }
Ejemplo n.º 3
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                //get user and target
                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 Application.Errors.RestException(HttpStatusCode.NotFound, new { user = "******" });
                }

                //attempt to find
                var following = await _context.Followings.SingleOrDefaultAsync(x => x.TargetId == target.Id && x.ObserverId == observer.Id);

                if (following != null)
                {
                    throw new Application.Errors.RestException(HttpStatusCode.BadRequest, new { following = "User already being followed." });
                }

                //create following
                if (following == null)
                {
                    following = new Domain.UserFollowing
                    {
                        Observer = observer,
                        Target   = target
                    };
                }

                //add following to DB
                _context.Followings.Add(following);

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

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

                throw new Exception("Problem saving changes.");
            }
Ejemplo n.º 4
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                //handler logic
                var observer = await _context.Users.SingleOrDefaultAsync(x => x.UserName == _userAccess.GetCurrentUsername());

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

                //observer will follow target user
                if (target == null)
                {
                    throw new RestException(System.Net.HttpStatusCode.NotFound, new { User = "******" });
                }

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

                if (following != null)
                {
                    throw new RestException(System.Net.HttpStatusCode.BadRequest, new { User = "******" });
                }
                else
                {
                    following = new Domain.UserFollowing
                    {
                        Observer = observer,
                        Target   = target
                    };

                    _context.Followings.Add(following);
                }

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

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

                throw new Exception("Problem in saving data to database");
            }
Ejemplo n.º 5
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                // we want both the users, the one we are following, and the current user
                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 = "******" });
                }

                // Check to see if we have an exisiting 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 { User = "******" });
                }

                if (following == null)
                {
                    following = new Domain.UserFollowing
                    {
                        Observer = observer,
                        Target   = target
                    };

                    _context.Followings.Add(following);
                }
                var success = await _context.SaveChangesAsync() > 0;

                // Returning to our API Controller. Will return a 200 Ok response.
                if (success)
                {
                    return(Unit.Value);
                }

                throw new Exception("Problem saving changes");
            }