private async Task <Message> SendTask(TaskDTO task, ProgressDTO userProgress, Chat chat, UserEntity user, TelegramBotClient client, ServiceManager serviceManager) { var progress = PrepareProgress(serviceManager.Logger, userProgress); var isLevelSolved = IsLevelSolved(userProgress); var answers = task.Answers.Select((e, index) => (letter: DialogMessages.Alphabet[index], answer: $"{e}")) .ToList(); var answerBlock = PrepareAnswers(answers, serviceManager.Logger); var message = FormatMessage(task, progress, answerBlock, isLevelSolved, serviceManager); serviceManager.Logger.LogInformation($"messageToSend : {message}"); var keyboard = PrepareButtons(user, task, serviceManager.Logger, answers); var taskMessage = await client.SendTextMessageAsync(chat.Id, message, ParseMode.Markdown); var reportCallback = taskMessage.MessageId.CreateMessageReportCallback(topicDto.Id, levelDto.Id); var reportButton = new[] { InlineKeyboardButton .WithCallbackData(ButtonNames.Report, reportCallback) }; var keyboardWithReport = new InlineKeyboardMarkup(keyboard.InlineKeyboard.Append(reportButton)); await client.EditMessageReplyMarkupAsync(chat.Id, taskMessage.MessageId, keyboardWithReport); return(taskMessage); }
private static string PrepareProgress(ILogger logger, ProgressDTO userProgress) { logger.LogInformation($"Progress: {userProgress.TasksSolved}:{userProgress.TasksCount}"); var progressBar = new CircleProgressBar(); var progress = progressBar.GenerateProgressBar(userProgress.TasksSolved, userProgress.TasksCount); return(progress); }
public bool SubmitProgress(Guid userId, ProgressDTO progressDTO) { ChapterProgress progress = chapterRepository.GetChapterProgress(userId, progressDTO.ChapterId); if (progress == null) { return(chapterRepository.CreateProgress(new ChapterProgress { UserId = userId, ChapterId = progressDTO.ChapterId, Score = progressDTO.Score })); } else { progress.Score = Math.Max(progress.Score, progressDTO.Score); return(chapterRepository.UpdateProgress(progress)); } }
public IEnumerable <ProgressDTO> GetProgressByUser(int id) { var categoriesFromDb = dbContext .Categories .ToList(); var progresses = new List <ProgressDTO>(); var progressesFromDb = dbContext .Progresses .ToList(); foreach (var categoryFromDb in categoriesFromDb) { var coursesProgresses = new List <CourseProgressDTO>(); var progress = new ProgressDTO { CategoryName = categoryFromDb.Name }; foreach (var course in categoryFromDb.Courses.Where(c => c.Users.Any(uc => uc.Id == id))) { var lastCompletedStage = progressesFromDb .Where(p => p.CourseId == course.Id && p.CategoryId == categoryFromDb.Id && p.UserId == id) .Select(cs => cs.StageId) .FirstOrDefault(); var courseProgress = new CourseProgressDTO { CourseName = course.Name, StageNames = course.Stages.Select(s => s.Name).ToList(), LastCompletedStage = course.Stages.Where(s => s.Id == lastCompletedStage).Select(s => s.Nr).FirstOrDefault() }; coursesProgresses.Add(courseProgress); } progress.Progresses = coursesProgresses; progresses.Add(progress); } return(progresses); }
public void UpdateProgress(ProgressDTO progressDto) { new ClientImagingServices().UpdateProgress(Convert.ToInt32(progressDto.taskId), progressDto.progress, progressDto.progressType); }
private bool IsLevelSolved(ProgressDTO progress) { return(progress.TasksCount == progress.TasksSolved); }