Тестовое задание для компании Sibdev
git clone https://github.com/UncleVasya/sibdev_job.git
cd sibdev_job
docker-compose up
Для удобства важные команды вынесены в Makefile:
* make build
* make run
* make test
* make bash
http://localhost:8000/api/deals-upload/ - импорт данных о сделках
http://localhost:8000/api/top-customers/ - Список наиболее потратившихся покупателей
По умолчанию показываются Топ 5 покупателей. Это настраивается параметром limit в запросе:
http://localhost:8000/api/top-customers/?limit=10
docker-compose run autotests
или
make test
- Данные хранятся в реляционной БД, взаимодействие с ней осуществляется посредством django ORM.
✓
- Ранее загруженные версии файла deals.csv не должны влиять на результат обработки новых.
✓
- Эндпоинты соответствуют спецификации
✓
- Приложение должно быть контейнирезировано при помощи docker;
✓
- Проект не использует глобальных зависимостей за исключением: python, docker, docker-compose;
✓
- Readme проекта описывает весь процесс установки, запуска и работы с сервисом;
✓
- Требования к фронтенду не предъявляются, интерфейс взаимодействия — RestFul API;
✓
- Проект запускается одной командой.
✓
- Команда, используемая для запуска проекта - docker-compose up;
✓
- Кэширование данных, возвращаемых GET-эндпоинтом, с обеспечением достоверности ответов;
✓
- Сервис django работает на многопоточном WSGI-сервере;
✓
- API реализован на основе DRF.
✓
- тесты на логику api;
- тесты на кешируемость ответов;
- для тестовой конфигурации используется эмулятор redis (fakeredis), чтобы можно было тестировать работу с кешом, не требуя при этом запущенный redis.
- подключен coverage для тестов (при запуске через make test)
----------------------------------------------------------------------
Ran 10 tests in 1.688s
OK
Destroying test database for alias 'default'...
Name Stmts Miss Branch BrPart Cover
----------------------------------------------------------------
app/deals/api/paginators.py 13 0 0 0 100%
app/deals/api/serializers.py 24 0 4 0 100%
app/deals/api/views.py 58 4 12 2 91%
app/deals/models.py 22 2 0 0 91%
----------------------------------------------------------------
TOTAL 117 6 16 2 94%
- сейчас кеш страниц сбрасывается только при импорте данных через api. Можно сбрасывать кеш при любым изменениях объектов, например через сигналы.
- добавить тесты на схему api, через jsonschema;
- проверить отсутствие n+1 проблемы в api и добавить тесты на это.
- больше тестов на работу с кешом;
- улучшить структуру проекта:
- вынести Dockerfile, entrypoint.sh в папку deploy/;
- разделить docker-compose на локальный и для сборки.
- настроить CI/CD (gitlab-ci.yml)
- настроить запуск линтеров при каждом коммите;