private async Task <bool> LessonPreviouslyCompleted(UpdateAchievementProgressDto input) { int numberOfTimesCompleted = await _mimoDbContext.UserLessons .Where(ul => ul.LessonId == input.LessonId && ul.UserId == input.UserId) .CountAsync(); return(numberOfTimesCompleted > 1); }
public async Task <HttpStatusCode> UpdateAchievementProgress(UpdateAchievementProgressDto input) { bool lessonPreviouslyCompleted = await LessonPreviouslyCompleted(input); if (lessonPreviouslyCompleted == true) { return(HttpStatusCode.OK); } else { List <AchievementDto> achievementDtos = await GetAllAchievements(); List <UserAchievementDto> userAchievementDtos = await _userAchievementsService.GetAllUserAchievements(input.UserId); int currentChapterId = await _mimoDbContext.Lessons .Where(l => l.Id == input.LessonId) .Select(l => l.ChapterId) .FirstOrDefaultAsync(); foreach (AchievementDto achievementDto in achievementDtos) { switch (achievementDto.AchievementTypeName) { case "LessonCount": await UpdateLessonCountAchievement(achievementDto, input.UserId, userAchievementDtos); break; case "ChapterCount": await UpdateChapterCountAchievement(achievementDto, input.UserId, input.LessonId, currentChapterId, userAchievementDtos); break; case "CompleteSwiftCourse": await UpdateCompleteSwiftCourseAchievement(achievementDto, input.UserId, input.LessonId, userAchievementDtos); break; case "CompleteJavascriptCourse": await UpdateCompleteJavascriptCourseAchievement(achievementDto, input.UserId, input.LessonId, userAchievementDtos); break; case "CompleteCSharpCourse": await UpdateCSharpCourseAchievement(achievementDto, input.UserId, input.LessonId, userAchievementDtos); break; default: throw new Exception("Achievement type could not be found"); } } return(HttpStatusCode.OK); } }
public async Task <HttpResponseMessage> PostLessonCompleted([FromBody] UserLessonDto userLessonDto) { UserLesson userLesson = new UserLesson { LessonId = userLessonDto.LessonId, UserId = userLessonDto.UserId, EndTime = userLessonDto.EndTime, StartTime = userLessonDto.StartTime }; await _mimoDbContext.UserLessons.AddAsync(userLesson); UpdateAchievementProgressDto updateAchievementProgressDto = new UpdateAchievementProgressDto { UserId = userLessonDto.UserId, LessonId = userLessonDto.LessonId }; await _mimoDbContext.SaveChangesAsync(); await _achievementsService.UpdateAchievementProgress(updateAchievementProgressDto); return(new HttpResponseMessage(HttpStatusCode.OK)); }