Exemple #1
0
        public Error?Validate(TagCloudInstruction instruction, TagCloudAnswer answer)
        {
            if (!answer.Tags.Any())
            {
                return(PollError.AnswerValidationFailed("The answer does not contain any tags"));
            }

            if (answer.Tags.Count > instruction.MaxTags)
            {
                return(PollError.AnswerValidationFailed(
                           $"Too many tags submitted (count: {answer.Tags.Count}, max: {instruction.MaxTags})"));
            }

            var groups =
                TagCloudGrouper.GroupAnswers(instruction.Mode, answer.Tags.Select(x => new TagCloudTag("1", x)));

            if (groups.Any(x => x.Count > 1))
            {
                var duplicateTags = groups.Where(x => x.Count > 1).ToList();
                return(PollError.AnswerValidationFailed(
                           $"The answer does contain {duplicateTags.Sum(x => x.Count)} duplicate tags. The following tags are an equal group: {string.Join(", ", duplicateTags.Select(x => "(" + string.Join(", ", x.Select(t => t.Tag)) + ")"))}."));
            }

            return(null);
        }
Exemple #2
0
        public ValueTask <PollResults> Aggregate(TagCloudInstruction instruction,
                                                 IReadOnlyDictionary <string, TagCloudAnswer> answers)
        {
            var submittedTags = answers.SelectMany(x => x.Value.Tags.Select(tag => new TagCloudTag(x.Key, tag)))
                                .ToList();

            var groups = TagCloudGrouper.GroupAnswers(instruction.Mode, submittedTags);

            return(new ValueTask <PollResults>(new TagCloudPollResults(groups.ToDictionary(
                                                                           tagGroup => GetGroupTagName(tagGroup.Select(x => x.Tag)),
                                                                           tagGroup => (IReadOnlyList <string>)tagGroup.Select(x => x.SubmittedBy).ToList()))));
        }