Контекст:
Я создаю систему бронирования для бизнеса (например, парикмахерской). Мне нужно вернуть массив всех доступных временных интервалов для заданного дня или недели.
Настройка:
Часы работы: с 08:00 до 18:00.
Продолжительность обслуживания: 50 минут.
У меня есть запрос PostgreSQL, который успешно возвращает список недоступных (уже забронированных) встреч для определенного работник.
Пример забронированных встреч из БД: [05/03-10:00, 05/03-10:50, 05/03-12:00]
Ожидаемый результат:
Мне нужно вернуть доступные места на основе рабочих часов и промежутков между забронированными встречами: [05/03-08:00, 03.05-08:50, 03.05-12:50...]
Мой текущий подход (и проблема):
Прямо сейчас моя логика пытается перебрать забронированные встречи и вычислить доступные промежутки между ними.
Однако это превращается во «Франкенштейна» крайних случаев. Например:
Пустые списки: если в день нет встреч, мне нужно написать отдельную логику, чтобы заполнить весь день.
Разнесенные дни: если пользователь выполняет поиск по всей неделе, а БД возвращает встречи только на понедельник и четверг, мой цикл изо всех сил пытается беспрепятственно заполнить полностью открытые дни между ними (вторник и среда), потому что он смотрит только на arr и arr[i+1].
Мой вопрос:
Расчет доступности путем поиска пробелов между существующими записями кажется невероятно хрупким. Существует ли стандартный алгоритм или шаблон проектирования интервального планирования, который более аккуратно обрабатывает такие крайние случаи (например, пустые дни и перекрывающуюся продолжительность)?
Подробнее здесь: https://stackoverflow.com/questions/799 ... n-existing