Пример #1
0
        public async Task <List <TimeSlot> > GetAvailableTimeSlots(DateTime targetDate, TimeSlotParameters parameters)
        {
            var(Open, Close) = BuildDateRange(targetDate, parameters.Open, parameters.Close);
            var calClient = _calendarClientFactory.GetCalendarClient(parameters.Calendars);
            var allSlots  = calClient.GetAllTimeSlots(Open, Close, parameters.DurationMinutes);
            var fullSlots = await calClient.GetFullTimeSlots(Open, Close);

            foreach (var slot in fullSlots)
            {
                allSlots.RemoveAll(s => s.Start >= slot.Start && s.End <= slot.End && s.Calendar == slot.Calendar);
            }

            var availableSlots = new List <TimeSlot>();

            foreach (var slot in allSlots)
            {
                if (!availableSlots.Any(s => s.Start == slot.Start && s.End == slot.End))
                {
                    availableSlots.Add(slot);
                }
            }

            return(availableSlots);
        }
Пример #2
0
        public async Task <List <CalendarTimeSlot> > GetAvailableTimeSlots(DateTime targetDate, TimeSlotParameters parameters)
        {
            var(Open, Close) = BuildDateRange(targetDate, parameters.Open, parameters.Close);
            var calClient = _calendarClientFactory.GetCalendarClient(parameters.Calendars);
            var allSlots  = calClient.GetAllTimeSlots(Open, Close, parameters.DurationMinutes);
            var fullSlots = await calClient.GetFullTimeSlots(Open, Close);

            var availableSlots = BuildAvailableSlots(allSlots, fullSlots);

            return(_distributionStrategy.DistributeAvailableSlots(availableSlots));
        }
Пример #3
0
        public async Task <ActionResult <List <CalendarTimeSlot> > > Get(DateTime targetDate, [FromQuery] TimeSlotParameters parameters, [FromQuery] string distributionStrategy)
        {
            var sbFactory = _scheduleBuilderFactory.GetScheduleBuilder(distributionStrategy);
            var timeSlots = await sbFactory.GetAvailableTimeSlots(targetDate, parameters);

            return(Ok(timeSlots));
        }