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")); }
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"); }
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."); }
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"); }
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"); }