В Контенте мы занимаемся агрегацией отелей поставщиков (supplier), объединяя одинаковые отели от разных поставщиков в единую сущность (мета-отель).
В этом задании мы предлагаем реализовать базовый сервис (API) для работы с отелями. Для дополнительного контекста и перспективы, представьте что это ключевой сервис в вашем тревел стартапе.
Список API, которые должны быть покрыты в этом задании:
- Создать отель поставщика
- Объединить 1 и более отелей поставщиков в один мета-отель
- Получить список мета-отелей и входящих в них отелей
- Перепривязать отель к другому мета-отелю
- Получить историю привязки отеля (к каким мета-отелям в какой момент времени он был привязан)
- Авторизация/аутентификация не нужна
- Отель может быть привязан только к одному мета-отелю в один момент времени
- В мета-отеле должен быть минимум один отель
- Отель можно отвязать от мета-отеля и привязать к другому
Мета-отель:
id: mercure_pattaya
id: windways
Отель:
id: 1
name: Mercure Pattaya
supplier_id: AAA
id: 2
name: Mercure Pattaya
supplier_id: BBB
id: 3
name: Windways Hotel
supplier_id: AAA
Цель этого тестового задания - увидеть ваш лучший/самый идиоматичный код на Python/Django.
Мы ожидаем увидеть:
- Документацию API
- README с описанием как запустить проект, запустить тесты и т.д
- Чистую архитектуру, с корректной связанностью кода (decoupling), complexity isolation
- Аккуратный, понятный, поддерживаемый код, с наличием комментариев к коду (если нужны)
- Код на публичной платформе (github/gitlab/bitbucket)
- Отсутствие "мертвого" кода (т.е пустые модули, неиспользуемые функции и параметры и т.д)
- Тесты (доказательство работоспособности кода)
- Реализация на Django + любой REST или RPC фреймворк, с которым вам комфортно
- PostgreSQL в качестве БД (помните про блокировки, транзакции, race conditions)
- Сервис корректно работает, если запущен в нескольких экземплярах (инстансах)
- Проект должен запускаться через docker-compose
Cтрогих сроков нет, но мы хотели бы получить от вас примерную оценку времени.
Не стесняйтесь задавать вопросы по заданию, если таковые возникнут.