adt -- application-design-test

SVI cc5932b61c SVI начало 8 месяцев назад
README.md cc5932b61c SVI начало 8 месяцев назад
go.mod cc5932b61c SVI начало 8 месяцев назад
main.go cc5932b61c SVI начало 8 месяцев назад

README.md

Application design

В коде представлен прототип сервиса бронирования номеров в отелях, в котором реализована возможность забронировать свободный номер в отеле.

Сервис будет развиваться, например:

  • появится отправка письма-подтверждения о бронировании
  • появятся скидки, промокоды, программы лояльности
  • появится возможность бронирования нескольких номеров

Задание

Провести рефакторинг структуры и кода приложения, исправить существующие проблемы в логике. Персистентное хранение реализовывать не требуется, все данные храним в памяти сервиса.

В результате выполнения задания ожидается структурированный код сервиса, с корректно работающей логикой сценариев бронирования номеров в отелях.

Чеклист:

  • код реорганизован и выделены слои
  • выделены абстракций и интерфейсы
  • техническе и логические ошибки исправлены

Ограничения:

  • ожидаем реализацию, которая управляет состоянием в памяти приложения, но которую легко заменить на внешнее хранилище
  • если у тебя есть опыт с Go: для решения надо использовать только стандартную библиотеку Go + роутер (например chi)
  • если у тебя нет опыта с Go: можно реализовать решение на своем любимом стеке технологий

Что будет на встрече

На встрече ожидаем что ты продемонстрируешь экран и презентуешь свое решение: расскажешь какими проблемами обладает исходный код и как они решены в твоем варианте. Мы будем задавать вопросы о том почему было решено разделить ответственность между компонентами тем или иным образом, какими принципами ты при этом руководствуешься. Спросим что будет если продакт решит добавить какую-то новую фичу — как она ляжет на предложенную тобой структуру. Также можем поговорить и о более технических вещах: о значениях и указателях, многопоточности, интерфейсах, каналах.

Например

go run main.go
curl --location --request POST 'localhost:8080/orders' \
--header 'Content-Type: application/json' \
--data-raw '{
    "hotel_id": "reddison",
    "room_id": "lux",
    "email": "guest@mail.ru",
    "from": "2024-01-02T00:00:00Z",
    "to": "2024-01-04T00:00:00Z"
}'