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); }
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)); }
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)); }