Тестовое задание в Контент
В Контенте мы занимаемся агрегацией отелей поставщиков (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трогих сроков нет, но мы хотели бы получить от вас примерную оценку времени.
Не стесняйтесь задавать вопросы по заданию, если таковые возникнут.