Пример #1
0
        private async Task ProcessUser(
            UserOption user,
            DateTimeOffset date,
            IEnumerable <DateTimeOffset> lessonTimes,
            ILogger log,
            CancellationToken cancellationToken = default)
        {
            var lessonRequest = new GetLessonsRequest(user, date, date.AddDays(1), _options.LocationId);
            GetLessonsResponse lessonResponse = await _client.GetLessons(lessonRequest, cancellationToken);

            List <Lesson> lessonsToJoin = lessonResponse.Lessons
                                          // Use OrdinalIgnoreCase and keyword "vrij" since the descriptions aren't consistent
                                          .Where(l => l.Description.Contains("vrij", StringComparison.OrdinalIgnoreCase) &&
                                                 lessonTimes.Contains(l.LessonStartTime))
                                          .ToList();

            if (lessonsToJoin.Count > 0)
            {
                var success = new List <Lesson>();
                var failed  = new List <Lesson>();

                foreach (Lesson lesson in lessonsToJoin)
                {
                    try
                    {
                        var joinRequest = new JoinLessonRequest(user, lesson.Id);
                        JoinLessonResponse joinResponse = await _client.JoinLesson(joinRequest, cancellationToken);

                        if (!joinResponse.Warning)
                        {
                            success.Add(lesson);
                        }
                        else
                        {
                            failed.Add(lesson);
                        }
                    }
                    catch (Exception ex)
                    {
                        log.LogError(ex, "Something went wrong while joining a lesson. {User} {LessonId}", user.User, lesson.Id);
                        failed.Add(lesson);
                    }
                }

                if (success.Count > 0)
                {
                    var mailRequest = new SendJoinMailRequest(user, success, failed);
                    await _emailClient.SendJoinMail(mailRequest, cancellationToken);

                    return;
                }
            }
            else
            {
                log.LogWarning("LessonsToJoin is empty for {User}", user.User);
            }

            await _emailClient.SendFailedMail(user);
        }
Пример #2
0
 public async Task <GetLessonsResponse> GetLessons(GetLessonsRequest request, CancellationToken cancellationToken = default) =>
 await PostAsync <GetLessonsRequest, GetLessonsResponse>("getLessonsId_V2", request, cancellationToken);