// Проверяет входит ли дата, запрошенная пользователем в учебный семестр, если нет, то дополнительно проверяет доступность экзаменов
        protected bool DateBoundariesCheck(State state, BsuirScheduleResponse schedule, out string result, out string errorMessage)
        {
            if (Date > DateTime.Parse(schedule.dateEnd, CultureInfo.GetCultureInfo("ru-RU")) || Date < DateTime.Parse(schedule.dateStart, CultureInfo.GetCultureInfo("ru-RU")))
            {
                if (schedule.examSchedules.Count() != 0)
                {
                    var exam = schedule.examSchedules.FirstOrDefault(exam => DateTime.Parse(exam.weekDay, CultureInfo.GetCultureInfo("ru-RU")) == Date);

                    if (exam == null)
                    {
                        errorMessage = "В этот день нет ни одной пары";
                        result       = "";
                        return(false);
                    }
                    else
                    {
                        errorMessage = "";
                        // 1 - с какого номера начинать нумеровать выводимый список экзаменов
                        result = FormExamSchedule(exam, state.User, 1);
                        return(true);
                    }
                }
                result       = "";
                errorMessage = $"Вы указали слишком большую, или слишком маленьку дату ({Date.ToString("d", CultureInfo.GetCultureInfo("ru-RU"))}), которая не входит в ваш учебный семестр!";
                return(false);
            }

            result       = "";
            errorMessage = "";
            return(true);
        }
        // Отправляет запрос на сервер с просьбой предоставить расписание
        protected bool TrySendScheduleResponse(ISchedulesRepository schedulesRepo, State state, out BsuirScheduleResponse result, out string errorMessage)
        {
            using var client = new HttpClient();
            var schedule      = new BsuirScheduleResponse();
            var bsuirResponse = client.GetAsync($"https://journal.bsuir.by/api/v1/studentGroup/schedule?studentGroup={state.User.Group}").Result;

            if (bsuirResponse.IsSuccessStatusCode)
            {
                var stringResponse = bsuirResponse.Content.ReadAsStringAsync().Result;
                if (String.IsNullOrWhiteSpace(stringResponse))
                {
                    result       = null;
                    errorMessage = "Похоже, что расписания вашей группы нет на сервере, сочувствую :(";
                    return(false);
                }
                schedule       = JsonConvert.DeserializeObject <BsuirScheduleResponse>(stringResponse);
                schedule.Group = int.Parse(schedule.studentGroup.name);

                schedulesRepo.AddSchedule(schedule);
            }
            else
            {
                result       = null;
                errorMessage = $"Простите, сервер не отвечает, а сохраненного расписания этой группы у меня нет :(((";
                return(false);
            }

            result       = schedule;
            errorMessage = "";
            return(true);
        }
        private string GetSchedule(BsuirScheduleResponse schedule, State state)
        {
            var mondayThisWeek = DateTime.Today.AddDays(-((int)DateTime.Today.DayOfWeek == 0 ? 6 : (int)DateTime.Today.DayOfWeek - 1));
            var weeksAdd       = (Date - mondayThisWeek).Days / 7;
            var week           = (weeksAdd + SchedulesRepository.CurrentWeek - 1) % 4 + 1;

            var responseText = FormResponse(week, schedule.schedules, state.User.DisplayAuditory,
                                            state.User.DisplayEmployeeName, state.User.DisplaySubjectTime, state.User.DisplaySubjectType);

            responseText = String.IsNullOrWhiteSpace(responseText)
                ? "В этот день нет ни одной пары"
                : responseText;

            return(responseText);
        }
 public async void AddSchedule(BsuirScheduleResponse schedule)
 {
     await Schedules.InsertOneAsync(schedule);
 }
 public async void UpdateSchedule(int group, BsuirScheduleResponse newSchedule)
 {
     await Schedules.ReplaceOneAsync(new BsonDocument("_id", group), newSchedule);
 }