Example #1
0
        public async Task <UserLoginViewModel> Handle(UserLoginQuery request, CancellationToken cancellationToken)
        {
            var user = await _context.Users.FirstOrDefaultAsync(x => x.Email.Equals(request.Email, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                return new UserLoginViewModel
                       {
                           Success = false,
                           Message = "Invalid email or password."
                       }
            }
            ;

            var verified = _hashGenerator.CheckHash(user.PasswordHash, request.Password);

            if (!verified)
            {
                return new UserLoginViewModel
                       {
                           Success = false,
                           Message = "Invalid email or password."
                       }
            }
            ;

            var accessToken = _tokenGenerator.GenerateToken(user.LastName, user.Email, user.Id);

            return(new UserLoginViewModel
            {
                Success = true,
                AccessToken = accessToken,
                User = new UserInfo
                {
                    FirstName = user.FirstName,
                    LastName = user.LastName,
                    Email = user.Email,
                    UserId = user.Id,
                    Image = user.ProfilePicture != null ? user.ProfilePicture : _placeHolderImageProvider.GetProfileImagePlaceHolder()
                }
            });
        }
    }
}
        public async Task <UserLoginViewModel> Handle(UserRegisterCommand request, CancellationToken cancellationToken)
        {
            var userExists = await _userRepository.UserExists(request.Email);

            if (userExists)
            {
                return new UserLoginViewModel
                       {
                           Success = false,
                           Message = "User already exists."
                       }
            }
            ;

            var passwordHash = _hashGenerator.ComputeHash(request.Password);
            var user         = AppUser.Create(
                firstname: request.FirstName,
                lastname: request.LastName,
                email: request.Email,
                passwordHash: passwordHash);

            await _userRepository.AddAsync(user);

            await _unitOfWork.SaveChangesAsync(CancellationToken.None);

            var accessToken = _tokenGenerator.GenerateToken(user.LastName, user.Email, user.Id);

            return(new UserLoginViewModel
            {
                Success = true,
                AccessToken = accessToken,
                User = new UserInfo
                {
                    FirstName = user.FirstName,
                    LastName = user.LastName,
                    Email = user.Email,
                    UserId = user.Id,
                    Image = user.ProfilePicture ?? _placeholderImageProvider.GetProfileImagePlaceHolder()
                }
            });
        }
    }
        public async Task <List <QuestionDto> > Handle(GetFeedByPageQuery request, CancellationToken cancellationToken)
        {
            var questions = await _questionsRepository.GetQuestionsPagedData(request.Page);

            //TODO: replace logic using AutoMapper
            var questionDtos = new List <QuestionDto>();

            foreach (var ques in questions)
            {
                questionDtos.Add(QuestionDto.FromEntity(ques));
            }

            questionDtos.ForEach(que =>
            {
                if (que.User.Image == null)
                {
                    que.User.Image = _placeholderImageProvider.GetProfileImagePlaceHolder();
                }
            });
            return(questionDtos);
        }
Example #4
0
        public async Task <List <QuestionDto> > Handle(GetFeaturedQuestionsQuery request, CancellationToken cancellationToken)
        {
            List <QuestionDto> questions = new List <QuestionDto>();

            var featured = await _context.Questions
                           .Include(x => x.Answers)
                           .Where(q => q.Answers.Count > 5)
                           .OrderBy(q => q.DateTime)
                           .Take(5)
                           .Select(QuestionDto.Projection)
                           .ToListAsync();

            if (featured.Any())
            {
                questions.AddRange(featured);
            }
            else
            {
                var mostAnswered = await _context.Questions
                                   .Include(x => x.Answers)
                                   .OrderByDescending(q => q.Answers.Count)
                                   .Take(5)
                                   .Select(QuestionDto.Projection)
                                   .ToListAsync();

                questions.AddRange(mostAnswered);
            }

            questions.ForEach(que =>
            {
                if (que.User.Image == null)
                {
                    que.User.Image = _placeHolderImageProvider.GetProfileImagePlaceHolder();
                }
            });


            return(questions);
        }