rest_booking.md 2.7 KB

Разработка и тестирование библиотеки расчета списка доступного времени бронирования столика в ресторане

Техническое задание на разработку библиотеки

  • название библиотеки: RestaurantHelpers.dll
  • Название класса: Booking
  • Название метода: CalcTimeList

В параметрах библиотеке передаются:

  • JSON-строка со временем работы ресторана по дням недели (1 - понедельник... 7- воскресенье), время работы задано строкой в формате "HH:MM-HH:MM", например:

    {
        "1": "11:00-23:00",
        "2": "11:00-23:00",
        "3": "11:00-23:00",
        "4": "11:00-23:00",
        "5": "11:00-05:00",
        "6": "12:00-05:00",
        "7": "12:00-03:00"
    }
    
  • Дата и время (в формате DataTime), для которого нужно рассчитать список доступного времени

    var targetTime = new DateTime(2024, 02, 28, 10, 0, 0);
    

Библиотека должна возвращать IEnumerable список TimeSpan с шагом 30 минут, например:

```cs
var result = new List<TimeSpan>() {
    new TimeSpan(11, 0, 0),
    new TimeSpan(11, 30, 0),
    new TimeSpan(12, 0, 0),
    new TimeSpan(12, 30, 0),
    ...
}
return result;
```

Итоговая спецификация метода CalcTimeList

public IEnumerable<TimeSpan> CalcTimeList(string workTime, DateTime targetTime);

При расчете нужно учитывать следующие ограничения:

  • при попытке заказать расчет на прошедшую дату генерировать исключение
  • при заказе расчета на "сегодня" учитывать текущее время и не включать в список прошедшее время
  • не включать в список время за 2 часа до завершения работы ресторана
  • учитывать "ночной" режим работы. Т.е. при расчете списка на воскресение включать утренние часы, остающиеся от субботы (не конкретно эти дни, а просто проверять время работы предыдущего дня недели)

Написать модульные тесты для разработанной библиотеки