예제 #1
0
            public async Task <Photo> Handle(Command request, CancellationToken cancellationToken)
            {
                var photoUploadResult = _photoAccessor.AddPhoto(request.File);

                var user = await _context.Users.SingleOrDefaultAsync(x =>
                                                                     x.UserName == _userAccessor.GetCurrentUserName());

                var photo = new Photo
                {
                    Url = photoUploadResult.Url,
                    Id  = photoUploadResult.PublicId
                };

                if (!user.Photos.Any(x => x.IsMain))
                {
                    photo.IsMain = true;
                }

                _context.Photos.Add(photo);
                var succes = await _context.SaveChangesAsync() > 0;

                if (succes)
                {
                    return(photo);
                }

                throw new Exception("Problem saving changes");
            }
예제 #2
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _context.Users.SingleOrDefaultAsync(x => x.UserName ==
                                                                     _userAccessor.GetCurrentUserName());

                var photo = user.Photos.FirstOrDefault(x => x.Id == request.Id);

                if (photo == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Photo = "Not Found" });
                }

                var currentMain = user.Photos.FirstOrDefault(x => x.IsMain);

                currentMain.IsMain = false;
                photo.IsMain       = true;

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

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

                throw new Exception("Problem saving changes");
            }
예제 #3
0
        public bool Resolve(UserActivity source, AttendeeDto destination, bool destMember, ResolutionContext context)
        {
            var currentUser = _context.Users.SingleOrDefaultAsync(x => x.UserName == _userAccessor.GetCurrentUserName()).Result;

            if (currentUser.Followings.Any(x => x.TargetId == source.AppUserId))
            {
                return(true);
            }

            return(false);
        }
예제 #4
0
            public async Task <User> Handle(Query request, CancellationToken cancellationToken)
            {
                var user = await _userManager.FindByNameAsync(_userAccesssor.GetCurrentUserName());

                return(new User
                {
                    DisplayName = user.DisplayName,
                    UserName = user.UserName,
                    Token = _jwtGeneretaor.CreateToken(user),
                    Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url
                });
            }
예제 #5
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _context.Users.SingleOrDefaultAsync(x => x.UserName ==
                                                                     _userAccessor.GetCurrentUserName());

                user.DisplayName = request.DisplayName ?? user.DisplayName;
                user.Bio         = request.Bio ?? user.Bio;

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

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

                throw new Exception("Problem saving changes");
            }
예제 #6
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var activity = await _context.Activities.FindAsync(request.Id);

                if (activity == null)
                {
                    throw new RestException(HttpStatusCode.NotFound,
                                            new { Activity = "Could not find activity" });
                }

                var user = await _context.Users.SingleOrDefaultAsync(x =>
                                                                     x.UserName == _userAccessor.GetCurrentUserName());

                var attendance = await _context.UserActivities.SingleOrDefaultAsync(x =>
                                                                                    x.AppUserId == user.Id && x.ActivityId == activity.Id);

                if (attendance != null)
                {
                    throw new RestException(HttpStatusCode.BadRequest,
                                            new { Attendance = "Already attending this activity" });
                }

                attendance = new UserActivity
                {
                    AppUser    = user,
                    Activity   = activity,
                    IsHost     = false,
                    DateJoined = DateTime.Now
                };

                _context.UserActivities.Add(attendance);

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

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

                throw new Exception("Problem saving changes");
            }
예제 #7
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var activity = await _context.Activities.FindAsync(request.Id);

                if (activity == null)
                {
                    throw new RestException(HttpStatusCode.NotFound,
                                            new { Activity = "Could not find activity" });
                }

                var user = await _context.Users.SingleOrDefaultAsync(x =>
                                                                     x.UserName == _userAccessor.GetCurrentUserName());

                var attendance = await _context.UserActivities.SingleOrDefaultAsync(x =>
                                                                                    x.AppUserId == user.Id && x.ActivityId == activity.Id);

                if (attendance == null)
                {
                    return(Unit.Value);
                }

                if (attendance.IsHost)
                {
                    throw new RestException(HttpStatusCode.BadRequest,
                                            new { Attendance = "You cannot remove yourself as host" });
                }

                _context.UserActivities.Remove(attendance);

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

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

                throw new Exception("Problem saving changes");
            }
예제 #8
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var activity = new Activity
                {
                    Id          = request.Id,
                    Title       = request.Title,
                    Description = request.Description,
                    Category    = request.Category,
                    Date        = request.Date,
                    City        = request.City,
                    Venue       = request.Venue
                };

                _context.Activities.Add(activity);

                var user = await _context.Users.SingleOrDefaultAsync(x =>
                                                                     x.UserName == _userAccessor.GetCurrentUserName());

                var attendee = new UserActivity
                {
                    AppUser    = user,
                    Activity   = activity,
                    IsHost     = true,
                    DateJoined = DateTime.Now
                };

                _context.UserActivities.Add(attendee);

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

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

                throw new Exception("Problem saving changes");
            }
예제 #9
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _context.Users.SingleOrDefaultAsync(x => x.UserName ==
                                                                     _userAccessor.GetCurrentUserName());

                var photo = user.Photos.FirstOrDefault(x => x.Id == request.Id);

                if (photo == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Photo = "Not Found" });
                }

                if (photo.IsMain)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Photo = "You cannot " +
                                                                                     "delete you main photo" });
                }

                var result = _photoAccessor.DeletePhoto(photo.Id);

                if (result == null)
                {
                    throw new Exception("Problem deleting the photo");
                }

                user.Photos.Remove(photo);

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

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

                throw new Exception("Problem saving changes");
            }
예제 #10
0
        public async Task <Profile> ReadProfile(string username)
        {
            var user = await _context.Users.SingleOrDefaultAsync(x => x.UserName == username);

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

            var currentUser = await _context.Users.SingleOrDefaultAsync(x => x.UserName == _userAccessor.GetCurrentUserName());

            var profile = new Profile
            {
                DisplayName    = user.DisplayName,
                UserName       = user.UserName,
                Image          = user.Photos.FirstOrDefault(x => x.IsMain)?.Url,
                Bio            = user.Bio,
                FollowersCount = user.Followers.Count(),
                FollowingCount = user.Followings.Count()
            };

            if (currentUser.Followings.Any(x => x.TargetId == user.Id))
            {
                profile.IsFollowed = true;
            }

            return(profile);
        }
예제 #11
0
            public async Task <ActivitiesEnvelope> Handle(Query request, CancellationToken cancellationToken)
            {
                var queryable = _context.Activities
                                .Where(x => x.Date >= request.StartDate)
                                .OrderBy(x => x.Date)
                                .AsQueryable();

                if (request.IsGoing && !request.IsHost)
                {
                    queryable = queryable.Where(x =>
                                                x.UserActivities.Any(a =>
                                                                     a.AppUser.UserName == _userAccessor.GetCurrentUserName()));
                }

                if (!request.IsGoing && request.IsHost)
                {
                    queryable = queryable.Where(x =>
                                                x.UserActivities.Any(a =>
                                                                     a.AppUser.UserName == _userAccessor.GetCurrentUserName() && a.IsHost));
                }

                var activities = await queryable
                                 .Skip(request.Offset ?? 0)
                                 .Take(request.Limit ?? 3)
                                 .ToListAsync();


                return(new ActivitiesEnvelope
                {
                    Activities = _mapper.Map <List <Activity>, List <ActivityDto> >(activities),
                    ActivityCount = queryable.Count()
                });
            }
예제 #12
0
            public async Task <Unit> 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.SingleOrDefaultAsync(x =>
                                                                               x.ObserverId == observer.Id && x.TargetId == target.Id);

                if (following != null)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { User = "******" });
                }

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

                _context.Followings.Add(following);

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

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

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