/jewels

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

Primary LanguagePythonMIT LicenseMIT

Проект Jewels

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