Пример #1
0
        private async Task JoinedProgramNotificationBadge(User registeredUser)
        {
            var program = await _programRepository.GetByIdAsync(registeredUser.ProgramId);

            var site = await _siteRepository.GetByIdAsync(registeredUser.SiteId);

            var notification = new Notification
            {
                PointsEarned = 0,
                Text         = $"<span class=\"fa fa-thumbs-o-up\"></span> You've successfully joined <strong>{site.Name}</strong>!",
                UserId       = registeredUser.Id,
                IsJoining    = true
            };

            if (program.JoinBadgeId != null)
            {
                var badge = await _badgeRepository.GetByIdAsync((int)program.JoinBadgeId);

                await _badgeRepository.AddUserBadge(registeredUser.Id, badge.Id);

                await _userLogRepository.AddAsync(registeredUser.Id, new UserLog
                {
                    UserId       = registeredUser.Id,
                    PointsEarned = 0,
                    IsDeleted    = false,
                    BadgeId      = badge.Id,
                    Description  = $"Joined {site.Name}!"
                });

                notification.BadgeId       = badge.Id;
                notification.BadgeFilename = badge.Filename;
            }
            await _notificationRepository.AddSaveAsync(registeredUser.Id, notification);
        }
        public async Task SubmitQuestionnaire(int questionnaireId, int userId, int?userAge,
                                              IList <Question> questions)
        {
            var requiredQuestionnaires = await _requiredQuestionnaireRepository.
                                         GetForUser(GetCurrentSiteId(), userId, userAge);

            if (!requiredQuestionnaires.Contains(questionnaireId))
            {
                _logger.LogError($"User {userId} is not eligible to answer questionnaire {questionnaireId}.");
                throw new GraException("Not eligible to answer that questionnaire.");
            }

            var questionnaire = await _questionnaireRepository.GetByIdAsync(questionnaireId, true);

            var questionnaireQuestions = questionnaire.Questions.Where(_ => _.Answers.Count > 0);

            if (questions.Select(_ => _.Id).Except(questionnaireQuestions.Select(_ => _.Id)).Any() ||
                questionnaireQuestions.Count() != questions.Count)
            {
                _logger.LogError($"User {userId} submitted invalid questions for questionnaire {questionnaireId}.");
                throw new GraException("Invalid questions answered.");
            }

            foreach (var question in questionnaireQuestions)
            {
                if (!question.Answers.Select(_ => _.Id).Contains(questions
                                                                 .Where(_ => _.Id == question.Id)
                                                                 .Select(_ => _.ParticipantAnswer)
                                                                 .SingleOrDefault()))
                {
                    _logger.LogError($"User {userId} submitted invalid answers for question {question.Id}.");
                    throw new GraException("Invalid answer selected.");
                }
            }

            await _requiredQuestionnaireRepository.SubmitQuestionnaire(questionnaireId, userId,
                                                                       questions);

            if (questionnaire.BadgeId.HasValue)
            {
                await QuestionnaireNotificationBadge(questionnaire, userId);

                var badge = await _badgeRepository.GetByIdAsync(questionnaire.BadgeId.Value);

                await _badgeRepository.AddUserBadge(userId, questionnaire.BadgeId.Value);
            }
        }
Пример #3
0
        private async Task <Badge> AwardBadgeAsync(int userId, int?badgeId)
        {
            Badge badge = null;

            if (badgeId != null)
            {
                badge = await _badgeRepository.GetByIdAsync((int)badgeId);

                await _badgeRepository.AddUserBadge(userId, (int)badgeId);
            }
            return(badge);
        }