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