コード例 #1
0
ファイル: Add.cs プロジェクト: brunojaccoud/e-cicle
            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));
        }