Cервис Jewels, для получения статистики по сделкам покупателей с драгоценными камнями.
- Django 4.2
- Django REST Framework 3.14
- WSGI сервер gunicorn 21.2
- База Данных PostgreSQL
- Кэширование Redis
- Контейнеризация Docker
Приложение написано на Python 3.9
Клонировать репозиторий:
git clone git@github.com:VtlBz/jewels.git
Перейти в папку infra/, находящуюся внутри папки с проектом.
В указанной папке в файле .env указать переменные окружения, соответствующие проекту. Пример заполнения:
SECRET_KEY=<указать-тут-ключ-проекта>
ALLOWED_HOSTS=<перечислить разрешенные хосты через пробел>
DEBUG_STATE=False # статус режима DEBUG, по умолчанию False
DB_ENGINE=django.db.backends.postgresql # Тип используемой БД. В проекте используется PostgreSQL
DB_NAME=postgres # Имя базы
POSTGRES_USER=postgres # Имя пользователя БД
POSTGRES_PASSWORD=postgres # Пароль пользователя БД
DB_HOST=localhost # название сервиса (контейнера), по умолчанию - localhost
DB_PORT=5432 # Порт для подключения к сервису, стандартный по умолчанию
REDIS_HOST=localhost # название сервиса (контейнера), по умолчанию - localhost
REDIS_PORT=6379 # Порт для подключения к сервису, стандартный по умолчанию
COMPOSE_PROJECT_NAME=jewels # имя проекта проекта в Docker Compose
Запустить сборку контейнеров командой:
sudo docker compose up -d
- В зависимости от настроек системы возможно тут и далее потребуется использовать команду docker compose c дефисом вместо пробела: docker-compose
При первом запуске создать и применить миграции:
sudo docker exec -it jewels-srv python manage.py makemigrations
sudo docker exec -it jewels-srv python manage.py migrate
При необходимости создать суперпользователя:
sudo docker exec -it jewels-srv python manage.py createsuperuser
В браузере перейти на страницу localhost/api/v1
Базовая документация находится по адресу localhost/api/v1/swagger/
В сервисе доступны следующие эндпоинты:
-
localhost/api/v1/deals/upload/
Позволяет отправить файл с информацией о сделках в формате .csv. Ключ (аргумент) -
deals
.
Формат запроса -{'deals': <файл, содержащий историю сделок>}
Порядок полей в файле -customer, item, total, quantity, date
. -
localhost/api/v1/top/
Позволяет получить список из 5 клиентов, потративших наибольшую сумму за весь период. Для каждого из ТОП-5 покупателей указаны логин клиента, сумма потраченных средств за весь период и список названий камней, которые купили как минимум двое из ТОП-5, включая данного клиента.
При необходимости указать вместо localhost нужное имя хоста.
* ТЗ и тестовые данные лежат в папке ./data