Skip to content

Latest commit

 

History

History
117 lines (92 loc) · 5.54 KB

README.md

File metadata and controls

117 lines (92 loc) · 5.54 KB

Mega Market API

Что это?

Mega Market API - бэкенд для веб-сервиса агрегатора товаров.

Сервис взаимодействует с БД PostgreSQL.
Основан на модулях:

  • aiohttp - асинхронный HTTP сервер
  • SQL Alchemy - ORM библиотека для работы с реляционными СУБД
  • asyncpg - асинхронный драйвер/интерфейс PostgreSQL
  • Alembic - средство миграции СУБД
  • marshmallow - сериализатор/валидатор json данных
  • apispec - генерация документации и OpenAPI спецификации (/docs)

Какие возможности?

Полная спецификация API доступна на запущенном сервере, по ссылке:

/docs

Характеристики:

Имеются сущности: товар OFFER и категория CATEGORY.

  • id: uuid идентификатор
  • name: имя
  • parentId: идентификатор родительской категории
  • type: тип (OFFER или CATEGORY)
  • price: цена товара или средняя цена товаров в категории
  • date: время последнего обновления
  • children: дочерние объекты категории

Доступные методы:

/imports

Импортирует новые товары и/или категории.
Товары/категории импортированные повторно обновляют текущие.

/delete/{id}

Удаляет элемент по идентификатору.
При удалении категории удаляются все дочерние элементы.

/nodes/{id}

Предоставляет информацию об элементе по идентификатору.
При получении информации о категории также предоставляется информация о её дочерних элементах.

/sales?date={to}

Получение списка товаров, цена которых была обновлена в течение 24 часов до времени, переданном в запросе.

/node/{id}/statistic?dateStart={from}&dateEnd={to}

Получение статистики (истории обновлений) по товару/категории за заданный полуинтервал [from, to)

Как запустить?

В контейнере

Требуется: Docker Compose v2+

  1. Перейдите в директорию /deploy:

cd deploy

  1. Запустите сборку и старт контейнеров:

make up

Для последующего удаления контейнеров вместе с данными:

make clean

Опционально можно настроить параметры создаваемого пользователя/пароля/базы в файле project/config.env (параметр DB_HOST игнорируется)

Нативно

Требования: PostgreSQL 14+, Python 3.10+

  1. Перейдите в директорию /project:

cd project

  1. Установите требуемые зависимости (виртуальное окружение):

pip install -r requirements.txt

  1. Настройте конфигурацию подключения к PostgreSQL в файле config.env:
DB_HOST=localhost
DB_DATABASE=mega_market
DB_USERNAME=postgres_user
DB_PASSWORD=your_db_password
  1. Проведите миграции для инициализации таблиц / функций / триггеров в БД:

alembic upgrade head

  1. Запуск сервера:

python main.py

Опционально: debug режим включается env переменной DEBUG

Структура проекта

deploy/
|- ...                # Файлы развёртывания в Docker Compose
project/
|- app/
|  |- accessors.py    # Аксессоры - методы-запросы к БД
|  |- database.py     # Подключение к БД
|  |- middlewares.py  # Фильтры запросов (валидатор запросов, обработчик ошибок)
|  |- models.py       # Модели - описание ORM объектов и БД проверок
|  |- routes.py       # Пути - маршрутизация запросов
|  |- schemas.py      # Схемы валидации/сериализации запросов/ответов
|  |- store.py        # Связывание приложения с БД и аксессорами
|  |- views.py        # Отображения - обработчики запросов
|- migrations/ 
|  |- ...             # Файлы миграций БД посредством Alembic
|- tests/
|  |- ...             # Тесты приложения
|- alembic.ini
|- config.env         # Конфигурация подключения к БД
|- main.py            # Входная точка приложения - запуск сервера
|- requirements.txt   # Python-зависимости
README.md             # Этот файл :)

Артем nGragas/Rush_iam Корников.
Вступительный проект для Летней Школы Бэкенд Разработки Яндекс 2022.