Exemple #1
0
        public async Task CreateQuestionSuggestionNotification(QuizaldoUser user, QuestionSuggestion questionSuggestion)
        {
            var notification = new Notification();

            notification.Text = $"{user.UserName} has suggested a question:\n " +
                                $"{questionSuggestion.QuestionName} with correct answer:\n " +
                                $"{questionSuggestion.CorrectAnswer}.";
            notification.CreatedOn = DateTime.Now;
            notification.UserId    = user.Id;
            notification.User      = user;

            await this.context.Notifications.AddAsync(notification);

            await this.context.SaveChangesAsync();
        }
Exemple #2
0
        public async Task CreateQuizNotification(Quiz quiz, QuizaldoUser user, QuizServiceModel model)
        {
            var notification = new Notification();

            notification.Text = $"{user.UserName} has completed {quiz.Name} quiz with " +
                                $"{model.Result.UsersCorrectAnswers} correct and " +
                                $"{model.Result.UsersWrongAnswers} wrong answers.";
            notification.CreatedOn = DateTime.Now;
            notification.UserId    = user.Id;
            notification.User      = user;

            await this.context.Notifications.AddAsync(notification);

            await this.context.SaveChangesAsync();
        }
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl      = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new QuizaldoUser {
                    UserName = Input.UserName, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    //var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                    //code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    //var callbackUrl = Url.Page(
                    //    "/Account/ConfirmEmail",
                    //    pageHandler: null,
                    //    values: new { area = "Identity", userId = user.Id, code = code },
                    //    protocol: Request.Scheme);

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent : false);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
        public async Task GetMasterAchievement(QuizaldoUser user)
        {
            var achievement = await this.context.Achievements
                              .FirstOrDefaultAsync(x => x.Name.Equals(AchievementConstants.Master));

            if (achievement == null)
            {
                return;
            }

            var userAchievements = await this.context.UserAchievements
                                   .Where(x => x.User.Id == user.Id)
                                   .Include(x => x.Achievement)
                                   .ToListAsync();

            //master achievement requires all previous achievements to be completed
            var allAchievementsCount = this.context.Achievements.Count() - 1;

            if (userAchievements.Count() == allAchievementsCount)
            {
                if (!this.context.UserAchievements.Any(x => x.UserId == user.Id && x.AchievementId == achievement.Id))
                {
                    var userAchivement = new UserAchievement();
                    userAchivement.UserId        = user.Id;
                    userAchivement.User          = user;
                    userAchivement.AchievementId = achievement.Id;
                    userAchivement.Achievement   = achievement;
                    userAchivement.AchievedOn    = DateTime.Now;

                    user.TotalAchievementPoints += achievement.Points;

                    await this.context.UserAchievements.AddAsync(userAchivement);

                    await this.context.SaveChangesAsync();

                    await this.notificationService.CreateAchievementNotification(user, achievement);
                }
            }
        }
        public async Task GetExcellentAchievement(QuizaldoUser user)
        {
            var achievement = await this.context.Achievements
                              .FirstOrDefaultAsync(x => x.Name.Equals(AchievementConstants.Excellent));

            if (achievement == null)
            {
                return;
            }

            var userResults = await this.context.UserResults
                              .Where(x => x.User.Id == user.Id)
                              .ToListAsync();


            if (userResults.Any(x => x.UsersWrongAnswers == 0))
            {
                if (!this.context.UserAchievements.Any(x => x.UserId == user.Id && x.AchievementId == achievement.Id))
                {
                    var userAchivement = new UserAchievement();
                    userAchivement.UserId        = user.Id;
                    userAchivement.User          = user;
                    userAchivement.AchievementId = achievement.Id;
                    userAchivement.Achievement   = achievement;
                    userAchivement.AchievedOn    = DateTime.Now;

                    user.TotalAchievementPoints += achievement.Points;

                    await this.context.UserAchievements.AddAsync(userAchivement);

                    await this.context.SaveChangesAsync();

                    await this.notificationService.CreateAchievementNotification(user, achievement);
                }
            }
        }