public async Task <ProfileEnvelope> Handle(Command message, CancellationToken cancellationToken) { var target = await _context.Persons.FirstOrDefaultAsync(x => x.Username == message.Username, cancellationToken); if (target == null) { throw new RestException(HttpStatusCode.NotFound, new { Target = "Target not found." }); } var observer = await _context.Persons.FirstOrDefaultAsync(x => x.Username == _currentUserAccessor.GetCurrentUsername(), cancellationToken); var followedPeople = await _context.FollowedPeople.FirstOrDefaultAsync(x => x.ObserverId == observer.PersonId && x.TargetId == target.PersonId, cancellationToken); if (followedPeople == null) { followedPeople = new FollowedPeople() { Observer = observer, ObserverId = observer.PersonId, Target = target, TargetId = target.PersonId }; await _context.FollowedPeople.AddAsync(followedPeople, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } return(await _profileReader.ReadProfile(message.Username)); }
public async Task <ProfileEnvelope> Follow(string username, CancellationToken cancellationToken) { var target = await this.context.Persons .FirstOrDefaultAsync(x => x.Username.Equals(username), cancellationToken); if (target == null) { throw new RestException(HttpStatusCode.NotFound); } var observer = await this.context.Persons .FirstOrDefaultAsync(x => x.Username.Equals(this.currentUserAccessor.GetCurrentUsername()), cancellationToken); var followedPeople = await this.context.FollowedPeople .FirstOrDefaultAsync(x => x.ObserverId == observer.PersonId && x.TargetId == target.PersonId, cancellationToken); if (followedPeople == null) { followedPeople = new FollowedPeople() { Observer = observer, ObserverId = observer.PersonId, Target = target, TargetId = target.PersonId }; await this.context.FollowedPeople.AddAsync(followedPeople, cancellationToken); await this.context.SaveChangesAsync(cancellationToken); } return(await this.profileReader.ReadProfile(username)); }